คำถามติดแท็ก dependency-injection

รูปแบบการออกแบบเพื่อลดการเชื่อมต่อระหว่างส่วนประกอบโดยการฉีดเข้าสู่การพึ่งพาองค์ประกอบซอฟต์แวร์แบบไดนามิกที่จำเป็นต้องใช้ในการทำงาน


30
การฉีดพึ่งพาคืออะไร?
มีคำถามมากมายที่โพสต์ไว้แล้วพร้อมคำถามเฉพาะเกี่ยวกับการฉีดพึ่งพาเช่นเมื่อไรที่จะใช้มันและกรอบใดบ้างที่มีให้ อย่างไรก็ตาม การฉีดพึ่งพาคืออะไรและเมื่อใด / ทำไมควรหรือไม่ควรใช้?

10
อะไรคือความแตกต่างระหว่าง @Inject และ @Autowired ใน Spring Framework ต้องใช้อันไหนภายใต้เงื่อนไขแบบใด
ฉันกำลังอ่านบล็อกบางอย่างใน SpringSource และในบล็อกใดบล็อกหนึ่งที่ผู้เขียนใช้งานอยู่@Injectและฉันคิดว่าเขาสามารถใช้งาน@Autowiredได้เช่นกัน นี่คือส่วนของรหัส: @Inject private CustomerOrderService customerOrderService; ฉันไม่แน่ใจเกี่ยวกับความแตกต่างระหว่าง@Injectและ@Autowiredและจะขอบคุณถ้ามีคนอธิบายความแตกต่างและสิ่งที่จะใช้ภายใต้สถานการณ์ใด

30
เหตุใดฉันจึงต้องใช้คอนเทนเนอร์ IoC แทนรหัส DI ที่ตรงไปตรงมา [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน6 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันใช้Dependency Injection (DI) มาระยะหนึ่งแล้วฉีดทั้งใน constructor, property หรือ method ฉันไม่เคยรู้สึกว่าต้องใช้คอนเทนเนอร์Inversion of Control (IoC) อย่างไรก็ตามยิ่งฉันอ่านมากขึ้นเท่าไหร่ฉันก็ยิ่งรู้สึกว่าชุมชนใช้คอนเทนเนอร์ IoC มากขึ้นเท่านั้น ฉันเล่นกับภาชนะ .NET เช่นStructureMap , Ninject , ความสามัคคีและFunq ฉันยังคงล้มเหลวในการดูว่าคอนเทนเนอร์ IoC จะได้รับประโยชน์ / ปรับปรุงรหัสของฉันอย่างไร ฉันกลัวที่จะเริ่มใช้ที่เก็บตู้เพราะเพื่อนร่วมงานของฉันหลายคนจะเห็นรหัสที่พวกเขาไม่เข้าใจ หลายคนอาจลังเลที่จะเรียนรู้เทคโนโลยีใหม่ กรุณาโน้มน้าวฉันว่าฉันต้องใช้คอนเทนเนอร์ IoC ฉันจะใช้ข้อโต้แย้งเหล่านี้เมื่อฉันพูดคุยกับนักพัฒนาเพื่อนในที่ทำงาน

5
เหตุใดจึงใช้การฉีดแบบพึ่งพา
ฉันพยายามที่จะเข้าใจการฉีดพึ่งพา (DI) และฉันล้มเหลวอีกครั้ง ดูเหมือนว่าโง่ รหัสของฉันไม่เป็นระเบียบ ฉันแทบจะไม่เขียนฟังก์ชั่นและอินเทอร์เฟซเสมือน (แม้ว่าฉันจะทำครั้งเดียวใน Blue Moon) และการกำหนดค่าทั้งหมดของฉันถูกจัดลำดับอย่างน่าอัศจรรย์ในชั้นเรียนโดยใช้ json.net (บางครั้งใช้ XML serializer) ฉันไม่เข้าใจว่ามันแก้ปัญหาอะไรได้บ้าง ดูเหมือนว่าจะพูดว่า: "สวัสดีเมื่อคุณพบฟังก์ชั่นนี้ให้ส่งคืนวัตถุที่เป็นประเภทนี้และใช้พารามิเตอร์ / ข้อมูลเหล่านี้" แต่ ... ทำไมฉันถึงเคยใช้มัน? หมายเหตุฉันไม่เคยต้องการใช้objectเช่นกัน แต่ฉันเข้าใจว่ามีไว้เพื่ออะไร สถานการณ์จริง ๆ ในการสร้างเว็บไซต์หรือแอปพลิเคชันเดสก์ท็อปที่จะใช้ DI คืออะไร ฉันสามารถสร้างกรณีต่าง ๆ ได้ง่าย ๆ เพราะเหตุที่บางคนอาจต้องการใช้ส่วนต่อประสาน / ฟังก์ชั่นเสมือนในเกม แต่หายากมาก (หายากมากที่ฉันจำไม่ได้ว่ามีอินสแตนซ์เดียว) เพื่อใช้ในรหัสที่ไม่ใช่เกม

22
การผกผันของการควบคุม vs การพึ่งพาการฉีด
จากบทความที่เขียนโดย Martin Fowlerการผกผันของการควบคุมเป็นหลักการที่ผังการควบคุมของโปรแกรมกลับด้าน: แทนที่จะให้โปรแกรมเมอร์ควบคุมการไหลของโปรแกรมแหล่งภายนอก (กรอบงานบริการส่วนประกอบอื่น ๆ ) เข้าควบคุม มัน. มันเหมือนกับว่าเราเสียบบางสิ่งเข้ากับสิ่งอื่น เขาพูดถึงตัวอย่างเกี่ยวกับ EJB 2.0: ตัวอย่างเช่นอินเทอร์เฟซเซสชัน Bean กำหนด ejbRemove, ejbPassivate (เก็บไว้ในที่เก็บรอง) และ ejbActivate (คืนค่าจากสถานะแฝง) คุณไม่สามารถควบคุมได้เมื่อมีการเรียกใช้เมธอดเหล่านี้ว่าทำอะไร ภาชนะโทรหาเราเราไม่เรียกมันว่า สิ่งนี้นำไปสู่ความแตกต่างระหว่างเฟรมเวิร์กและไลบรารี: Inversion of Control เป็นส่วนสำคัญของสิ่งที่ทำให้เฟรมเวิร์กแตกต่างจากไลบรารี ไลบรารีเป็นชุดของฟังก์ชั่นที่คุณสามารถโทรหาได้ในปัจจุบันมักจัดเป็นคลาส การโทรแต่ละครั้งจะทำงานและส่งคืนการควบคุมให้กับลูกค้า ฉันคิดว่ามุมมองที่ DI คือ IOC หมายถึงการพึ่งพาของวัตถุที่มีการคว่ำ: แทนที่จะควบคุมการพึ่งพาของตัวเองวงจรชีวิต ... สิ่งอื่นทำเพื่อคุณ แต่อย่างที่คุณบอกฉันเกี่ยวกับ DI ด้วยมือ DI ไม่จำเป็นต้องเป็น IOC เรายังสามารถมี DI และไม่มี IOC อย่างไรก็ตามในบทความนี้ …

28
การพึ่งพาการฉีดกับรูปแบบโรงงาน
ตัวอย่างส่วนใหญ่ที่ยกมาสำหรับการใช้งานของการพึ่งพาการฉีดเราสามารถแก้ปัญหาโดยใช้รูปแบบโรงงานเช่นกัน ดูเหมือนว่าเมื่อมันมาถึงการใช้งาน / ออกแบบความแตกต่างระหว่างการฉีดพึ่งพาและโรงงานเบลอหรือบาง เมื่อมีคนบอกฉันว่ามันเป็นวิธีที่คุณใช้มันสร้างความแตกต่าง! ฉันเคยใช้StructureMap a DI container เพื่อแก้ปัญหาหลังจากนั้นฉันออกแบบมันขึ้นมาใหม่เพื่อทำงานกับโรงงานที่เรียบง่ายและลบการอ้างอิงไปที่ StructureMap ใครสามารถบอกฉันได้ว่าอะไรคือความแตกต่างระหว่างพวกเขากับที่จะใช้อะไรแนวปฏิบัติที่ดีที่สุดที่นี่คืออะไร

9
หนึ่ง DbContext ต่อคำขอทางเว็บ…เพราะอะไร
ฉันอ่านบทความจำนวนมากที่อธิบายถึงวิธีการตั้งค่า Entity Framework DbContextเพื่อให้มีการสร้างและใช้เพียงหนึ่งรายการต่อการร้องขอ HTTP ของเว็บโดยใช้เฟรมเวิร์ก DI ต่างๆ ทำไมนี่เป็นความคิดที่ดีตั้งแต่แรก? คุณได้รับประโยชน์อะไรบ้างจากการใช้วิธีการนี้ มีสถานการณ์บางอย่างที่จะเป็นความคิดที่ดีหรือไม่? มีสิ่งใดบ้างที่คุณสามารถทำได้โดยใช้เทคนิคนี้ที่คุณไม่สามารถทำได้เมื่อสร้างอินสแตนซ์DbContextของการเรียกเมธอดที่เก็บ?

12
กรอบการฉีด. NET Dependency ใดที่ควรพิจารณา [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา C # /. NET Dependency Injection Framework ใดที่ควรพิจารณา? และสิ่งที่คุณสามารถพูดเกี่ยวกับความซับซ้อนและความเร็วของพวกเขา

11
@Resource กับ @Autowired
ซึ่งคำอธิบายประกอบ@Resource ( jsr250 ) หรือ@Autowired (ฤดูใบไม้ผลิที่เฉพาะเจาะจง) ผมควรจะใช้ในการ DI? ฉันใช้งานได้สำเร็จทั้งในอดีต@Resource(name="blah")และ@Autowired @Qualifier("blah") สัญชาตญาณของฉันคือติดกับ@Resourceแท็กเนื่องจากมันได้รับการยอมรับจากคน jsr ใครมีความคิดที่แข็งแกร่งในเรื่องนี้?

19
อะไรคือข้อเสียในการใช้การฉีดพึ่งพา? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันพยายามที่จะแนะนำ DI เป็นรูปแบบที่นี่ในที่ทำงานและหนึ่งในนักพัฒนานำของเราต้องการทราบ: อะไร - ถ้ามี - มีข้อเสียในการใช้รูปแบบการฉีดพึ่งพาหรือไม่ หมายเหตุฉันกำลังมองหาที่ - ถ้าเป็นไปได้ - รายการที่ละเอียดถี่ถ้วนไม่ใช่การอภิปรายเชิงอัตนัยในหัวข้อ ชี้แจง : ฉันกำลังพูดถึงรูปแบบการพึ่งพา(ดูบทความนี้โดย Martin Fowler) ไม่ใช่กรอบที่เฉพาะเจาะจงไม่ว่าจะเป็น XML (เช่นฤดูใบไม้ผลิ) หรือตามรหัส (เช่น Guice) หรือ "ม้วนตัวเอง" . แก้ไข : บางการอภิปรายเพิ่มเติม / คุยโว / อภิปรายเกิดขึ้น/ r / การเขียนโปรแกรมที่นี่

15
เหตุใด IoC / DI จึงไม่ธรรมดาใน Python
ใน Java IoC / DIเป็นวิธีปฏิบัติทั่วไปที่ใช้กันอย่างแพร่หลายในเว็บแอปพลิเคชันเกือบทุกเฟรมเวิร์กที่มีอยู่และ Java EE ในทางกลับกันมีเว็บแอพพลิเคชั่น Python ขนาดใหญ่จำนวนมาก แต่นอกเหนือจาก Zope (ซึ่งฉันได้ยินมาว่าน่ากลัวรหัส) IoC ดูเหมือนจะไม่ธรรมดาในโลก Python (โปรดระบุชื่อตัวอย่างถ้าคุณคิดว่าฉันผิด) มีแน่นอนหลายโคลนนิ่งนิยม Java IoC กรอบพร้อมใช้งานสำหรับหลามspringpythonตัวอย่างเช่น แต่ดูเหมือนว่าจะไม่มีใครใช้มันได้เลย อย่างน้อยฉันไม่เคยเหยียบย่ำแอปพลิเคชันบนเว็บDjangoหรือsqlalchemy + <insert your favorite wsgi toolkit here>ซึ่งใช้อะไรแบบนั้น ในความคิดของฉัน IoC มีข้อได้เปรียบที่สมเหตุสมผลและจะทำให้ง่ายต่อการแทนที่ django-default-user-model ตัวอย่างเช่น แต่การใช้อินเตอร์เฟซคลาสที่กว้างขวางและ IoC ใน Python นั้นค่อนข้างแปลกและไม่ใช่ "pythonic « แต่บางคนอาจมีคำอธิบายที่ดีกว่าทำไม IoC ไม่ได้ใช้อย่างกว้างขวางใน Python

7
กรอบงาน C # DI / IoC หลักเปรียบเทียบได้อย่างไร [ปิด]
ปิดปิดคำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เมื่อมีความเสี่ยงในการก้าวเข้าสู่ดินแดนสงครามศักดิ์สิทธิ์จุดแข็งและจุดอ่อนของกรอบ DI / IoC ที่ได้รับความนิยมเหล่านี้คืออะไรและใครจะถือว่าดีที่สุดได้อย่างง่ายดาย .. : Ninject เอกภาพ Castle.Windsor Autofac StructureMap มี DI / IoC Frameworks อื่น ๆ สำหรับ C # ที่ฉันไม่ได้ระบุไว้ที่นี่หรือไม่? ในบริบทของกรณีการใช้งานของฉันฉันกำลังสร้างแอป WPF ของลูกค้าและโครงสร้างพื้นฐานบริการ WCF / SQL ใช้งานง่าย (โดยเฉพาะอย่างยิ่งในแง่ของไวยากรณ์ที่ชัดเจนและรัดกุม) เอกสารที่สอดคล้องกันการสนับสนุนชุมชนที่ดีและประสิทธิภาพเป็นปัจจัยสำคัญทั้งหมด ในการเลือกของฉัน ปรับปรุง: ทรัพยากรและคำถามซ้ำ ๆ ที่อ้างถึงดูเหมือนจะล้าสมัยใครที่มีความรู้ในกรอบเหล่านี้จะออกมาข้างนอกและให้ข้อมูลเชิงลึกที่แท้จริงบ้างไหม? ฉันตระหนักว่าความคิดเห็นส่วนใหญ่ในเรื่องนี้มีแนวโน้มที่จะลำเอียง แต่ฉันหวังว่าจะมีคนใช้เวลาศึกษากรอบการทำงานเหล่านี้ทั้งหมดและมีการเปรียบเทียบวัตถุประสงค์อย่างน้อยโดยทั่วไป ฉันค่อนข้างเต็มใจที่จะทำการสอบสวนของตัวเองหากยังไม่เคยทำมาก่อน แต่ฉันคิดว่านี่เป็นสิ่งที่คนอย่างน้อยสองสามคนได้ทำไปแล้ว อัปเดตที่สอง: หากคุณมีประสบการณ์กับภาชนะ …

15
รูปแบบการพึ่งพาการฉีดและการบริการค้นหาความแตกต่างคืออะไร
ทั้งสองรูปแบบดูเหมือนจะนำหลักการของการกลับมาควบคุม นั่นคือวัตถุไม่ควรรู้วิธีสร้างการพึ่งพา พึ่งพาการฉีด (DI) ดูเหมือนว่าจะใช้ตัวสร้างหรือ setter เพื่อ "ฉีด" มันขึ้นอยู่กับการพึ่งพา ตัวอย่างการใช้ Constructor Injection: //Foo Needs an IBar public class Foo { private IBar bar; public Foo(IBar bar) { this.bar = bar; } //... } ผู้ให้บริการดูเหมือนว่าจะใช้ "ภาชนะ" ซึ่งสายขึ้นอยู่กับการพึ่งพาและให้แถบมันเป็น foo ตัวอย่างการใช้ตัวระบุบริการ: //Foo Needs an IBar public class Foo { private IBar bar; public …

7
การแก้ไขอินสแตนซ์ด้วย ASP.NET Core DI
ฉันจะแก้ไขชนิดด้วยตนเองโดยใช้เฟรมเวิร์กการฉีดพึ่งพาของ ASP.NET Core MVC ได้อย่างไร การตั้งค่าคอนเทนเนอร์นั้นง่ายพอ: public void ConfigureServices(IServiceCollection services) { // ... services.AddTransient<ISomeService, SomeConcreteService>(); } แต่ฉันจะแก้ไขISomeServiceได้อย่างไรถ้าไม่ฉีดยา? ตัวอย่างเช่นฉันต้องการทำสิ่งนี้: ISomeService service = services.Resolve<ISomeService>(); IServiceCollectionไม่มีวิธีการดังกล่าวในการเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.