คำถามติดแท็ก inversion-of-control

Inversion of control (IoC) เป็นหลักการเชิงนามธรรมที่อธิบายลักษณะของการออกแบบสถาปัตยกรรมซอฟต์แวร์บางอย่างซึ่งการไหลของการควบคุมระบบจะกลับด้านเมื่อเทียบกับการเขียนโปรแกรมขั้นตอน

20
SqlException จาก Entity Framework - ไม่อนุญาตให้ทำธุรกรรมใหม่เนื่องจากมีเธรดอื่นที่ทำงานอยู่ในเซสชัน
ขณะนี้ฉันได้รับข้อผิดพลาดนี้: System.Data.SqlClient.SqlException: ไม่อนุญาตการทำธุรกรรมใหม่เนื่องจากมีเธรดอื่นที่ทำงานอยู่ในเซสชัน ขณะเรียกใช้รหัสนี้: public class ProductManager : IProductManager { #region Declare Models private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString); private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString); #endregion public IProduct GetProductById(Guid productId) { // Do a quick sync of the feeds... SyncFeeds(); ... // get a product... ... return product; } private void SyncFeeds() …

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

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

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

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

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

4
ไลบรารี Inject (In) Dependency Inject (มิตร)
ฉันไตร่ตรองการออกแบบห้องสมุด C # ที่จะมีฟังก์ชั่นระดับสูงที่แตกต่างกันหลายอย่าง แน่นอนว่าฟังก์ชั่นระดับสูงเหล่านั้นจะถูกนำไปใช้โดยใช้หลักการออกแบบคลาสSOLIDให้มากที่สุด ดังนั้นจึงอาจมีคลาสที่ตั้งใจให้ผู้บริโภคใช้โดยตรงเป็นประจำและ "คลาสที่รองรับ" ที่ขึ้นต่อกันของคลาส "ผู้ใช้ปลายทาง" ทั่วไป คำถามคือวิธีที่ดีที่สุดในการออกแบบห้องสมุดคือ: ผู้ไม่เชื่อเรื่องพระเจ้า - แม้ว่าการเพิ่ม "การสนับสนุน" พื้นฐานสำหรับหนึ่งหรือสองของห้องสมุด DI ทั่วไป (โครงสร้างแผนที่, Ninject, ฯลฯ ) ดูเหมือนว่าสมเหตุสมผลฉันต้องการให้ผู้บริโภคสามารถใช้ห้องสมุดที่มีกรอบ DI ใด ๆ ใช้งานไม่ได้ DI - หากผู้บริโภคของห้องสมุดไม่ใช้ DI ห้องสมุดก็ควรจะใช้งานได้ง่ายที่สุดเท่าที่จะเป็นไปได้ลดปริมาณงานที่ผู้ใช้ต้องทำเพื่อสร้างการพึ่งพา "ไม่สำคัญ" เหล่านี้ทั้งหมดเพียงเพื่อ คลาส "ของจริง" ที่พวกเขาต้องการใช้ ความคิดปัจจุบันของฉันคือการจัดหา "DI registration modules" สองสามข้อสำหรับไลบรารี DI ทั่วไป (เช่นรีจิสทรี StructureMap, โมดูล Ninject) และชุดชั้นเรียนหรือชุดโรงงานที่ไม่ได้เป็น DI …

21
ฉันต้องการการฉีดพึ่งพาใน NodeJS หรือจะจัดการกับ ...
ฉันกำลังสร้างโครงการทดลองบางอย่างที่มี nodejs ฉันได้ตั้งโปรแกรม Java EE เว็บแอพพลิเคชั่นไว้มากมายกับ Spring และชื่นชมความสะดวกในการใช้งานที่นั่น ตอนนี้ฉันอยากรู้อยากเห็น: ฉันจะฉีดพึ่งพาโหนดได้อย่างไร หรือ: ฉันต้องการมันด้วยเหรอ? มีแนวคิดการแทนที่เนื่องจากรูปแบบการเขียนโปรแกรมแตกต่างกันหรือไม่? ฉันกำลังพูดถึงสิ่งที่เรียบง่ายเช่นการแชร์วัตถุการเชื่อมต่อฐานข้อมูลจนถึงตอนนี้ แต่ฉันยังไม่พบวิธีแก้ปัญหาที่ทำให้ฉันพอใจ

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

5
Castle Windsor คืออะไรและทำไมฉันถึงต้องแคร์?
ฉันเป็นนักพัฒนา Windows มาเป็นเวลานานโดยตัดฟันของฉันใน win32 และ COM ต้น ฉันทำงานกับ. NET ตั้งแต่ปี 2001 ดังนั้นฉันจึงค่อนข้างคล่องแคล่วใน C # และ CLR ฉันไม่เคยได้ยินเกี่ยวกับ Castle Windsor มาก่อนจนกว่าฉันจะเริ่มมีส่วนร่วมใน Stack Overflow ฉันอ่านคู่มือ "เริ่มต้นใช้งาน" ของ Castle Windsor แล้ว แต่ยังไม่ได้คลิก สอนเทคนิคใหม่ให้กับสุนัขตัวเก่าและบอกฉันว่าทำไมฉันจึงควรรวม Castle Windsor เข้ากับแอพสำหรับองค์กร

7
ใครสามารถอธิบาย Microsoft Unity ได้บ้าง
ฉันได้อ่านบทความเกี่ยวกับ MSDN เกี่ยวกับ Unity (Dependency Injection, Inversion of Control) แต่ฉันคิดว่าฉันต้องการมันอธิบายในคำศัพท์ง่ายๆ (หรือตัวอย่างง่ายๆ) ฉันคุ้นเคยกับรูปแบบ MVPC (เราใช้ที่นี่) แต่ฉันก็ยังไม่เข้าใจสิ่งที่เป็นเอกภาพจริงๆและฉันคิดว่ามันเป็นขั้นตอนต่อไปในการออกแบบแอปพลิเคชันของเรา

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

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เมื่อมาถึงจุดที่ผมแก้ไขอินเตอร์เฟซของฉันฉันไม่ต้องการที่จะรู้อะไรเกี่ยวกับการดำเนินงานของสิ่งที่ฉันต้องการคือความรู้ที่ว่าอินเตอร์เฟสนี้ต้องการพารามิเตอร์การกำหนดค่าเริ่มต้นที่แน่นอน มีวิธีการอย่างใดคำอธิบายประกอบ (คุณสมบัติ?) อินเตอร์เฟซที่มีข้อมูลนี้และส่งผ่านไปยังกรอบเมื่อวัตถุถูกสร้างขึ้น? แก้ไข: อธิบายอินเตอร์เฟสอีกเล็กน้อย

8
Enterprise Library Unity เทียบกับคอนเทนเนอร์ IoC อื่น ๆ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ข้อดีข้อเสียของการใช้ Enterprise Library Unity เทียบกับคอนเทนเนอร์ IoC อื่น ๆ (Windsor, Spring.Net, Autofac .. ) คืออะไร?

21
ต้องพึ่งพาการฉีดมาเป็นค่าใช้จ่ายของการห่อหุ้มหรือไม่?
ถ้าฉันเข้าใจถูกต้องกลไกทั่วไปสำหรับการพึ่งพาการฉีดคือการฉีดผ่านคอนสตรัคเตอร์ของคลาสหรือผ่านคุณสมบัติสาธารณะ (สมาชิก) ของคลาส นี่เป็นการเปิดเผยการพึ่งพาที่ถูกฉีดและละเมิดหลักการ OOP ของการห่อหุ้ม ฉันถูกต้องในการระบุการแลกเปลี่ยนนี้หรือไม่? คุณจัดการกับปัญหานี้อย่างไร โปรดดูคำตอบของคำถามด้านล่างด้วย

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