คำถามติดแท็ก ioc-container

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

11
การลงทะเบียนอัตโนมัติทำงานอย่างไรใน Spring
ฉันสับสนเล็กน้อยว่าการกลับตัวของการควบคุม ( IoC) ทำงานSpringอย่างไร สมมติว่าฉันมีคลาสบริการที่เรียกUserServiceImplว่าใช้UserServiceอินเทอร์เฟซ สิ่งนี้จะเป็น@Autowiredอย่างไร และในฉันฉันControllersจะได้instantiateรับinstanceบริการนี้อย่างไร? ฉันจะทำสิ่งต่อไปนี้หรือไม่? UserService userService = new UserServiceImpl();

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

9
วิธีการหลีกเลี่ยงการพึ่งพาการสร้างบ้าฉีด?
ฉันพบว่าตัวสร้างของฉันเริ่มมีลักษณะเช่นนี้: public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... ) ด้วยรายการพารามิเตอร์ที่เพิ่มขึ้น เนื่องจาก "คอนเทนเนอร์" เป็นคอนเทนเนอร์ฉีดที่ขึ้นต่อกันของฉันทำไมฉันจึงทำสิ่งนี้ไม่ได้: public MyClass(Container con) สำหรับทุกชั้น? ข้อเสียคืออะไร? ถ้าฉันทำเช่นนี้มันให้ความรู้สึกเหมือนกำลังใช้ไฟฟ้าสถิตย์ กรุณาแบ่งปันความคิดของคุณเกี่ยวกับ IoC และบ้าคลั่งฉีดพึ่งพา

5
มีรูปแบบสำหรับการเริ่มต้นวัตถุที่สร้างผ่านคอนเทนเนอร์ DI หรือไม่
ฉันพยายามรับ Unity เพื่อจัดการการสร้างวัตถุของฉันและฉันต้องการมีพารามิเตอร์การกำหนดค่าเริ่มต้นบางอย่างที่ไม่รู้จักจนกระทั่งเวลาใช้งาน: ในขณะนี้วิธีเดียวที่ฉันสามารถคิดวิธีทำคือมีวิธี Init บนอินเทอร์เฟซ interface IMyIntf { void Initialize(string runTimeParam); string RunTimeParam { get; } } จากนั้นให้ใช้ (ใน Unity) ฉันจะทำสิ่งนี้: var IMyIntf = unityContainer.Resolve<IMyIntf>(); IMyIntf.Initialize("somevalue"); ในสถานการณ์สมมตินี้runTimeParamจะกำหนดพารามิเตอร์ขณะใช้งานโดยยึดตามข้อมูลผู้ใช้ กรณีเล็ก ๆ น้อย ๆ ที่นี่เพียงคืนค่าrunTimeParamแต่ในความเป็นจริงพารามิเตอร์จะเป็นชื่อไฟล์และวิธีการเริ่มต้นจะทำอะไรกับไฟล์ สิ่งนี้สร้างปัญหาจำนวนหนึ่ง ได้แก่ Initializeวิธีนี้มีอยู่ในส่วนต่อประสานและสามารถเรียกได้หลายครั้ง การตั้งธงในการดำเนินการและการขว้างปาข้อยกเว้นในการเรียกซ้ำInitializeดูเหมือนว่าวิธีที่อุ้ยอ้าย เมื่อถึงจุดที่ฉันแก้ไขอินเทอร์เฟซของฉันฉันไม่ต้องการรู้อะไรเกี่ยวกับการใช้งาน IMyIntfเมื่อมาถึงจุดที่ผมแก้ไขอินเตอร์เฟซของฉันฉันไม่ต้องการที่จะรู้อะไรเกี่ยวกับการดำเนินงานของสิ่งที่ฉันต้องการคือความรู้ที่ว่าอินเตอร์เฟสนี้ต้องการพารามิเตอร์การกำหนดค่าเริ่มต้นที่แน่นอน มีวิธีการอย่างใดคำอธิบายประกอบ (คุณสมบัติ?) อินเตอร์เฟซที่มีข้อมูลนี้และส่งผ่านไปยังกรอบเมื่อวัตถุถูกสร้างขึ้น? แก้ไข: อธิบายอินเตอร์เฟสอีกเล็กน้อย

3
.NET Core DI วิธีการส่งผ่านพารามิเตอร์ไปยังตัวสร้าง
มีตัวสร้างบริการต่อไปนี้ public class Service : IService { public Service(IOtherService service1, IAnotherOne service2, string arg) { } } ทางเลือกในการส่งผ่านพารามิเตอร์โดยใช้กลไก. NET Core IOC คืออะไร _serviceCollection.AddSingleton<IOtherService , OtherService>(); _serviceCollection.AddSingleton<IAnotherOne , AnotherOne>(); _serviceCollection.AddSingleton<IService>(x=>new Service( _serviceCollection.BuildServiceProvider().GetService<IOtherService>(), _serviceCollection.BuildServiceProvider().GetService<IAnotherOne >(), "" )); มีวิธีอื่น ๆ ?

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