หากฉันไม่ได้ใช้คอนเทนเนอร์ DI ฉันจะไม่ต้องอ้างอิงไลบรารี EntityFramework ในแอป MVC3 ของฉันมีเพียงชั้นธุรกิจของฉันเท่านั้นที่จะอ้างอิงเลเยอร์ DAL / Repo ของฉัน
ใช่นั่นคือสถานการณ์ที่ DI ทำงานอย่างหนักเพื่อหลีกเลี่ยง :)
ด้วยรหัสที่เชื่อมโยงกันอย่างแน่นหนาแต่ละไลบรารีอาจมีการอ้างอิงเพียงเล็กน้อย แต่สิ่งเหล่านี้มีการอ้างอิงอื่น ๆ อีกครั้งสร้างกราฟเชิงลึกของการอ้างอิงเช่นนี้:
เพราะกราฟพึ่งพาอยู่ลึกก็หมายความว่าห้องสมุดส่วนใหญ่ลากไปจำนวนมากของการอ้างอิงอื่น ๆ - เช่นในแผนภาพ, ห้องสมุด Cลากพร้อมห้องสมุด H, ห้องสมุด E, J ห้องสมุด, ห้องสมุด, M, K ห้องสมุดและห้องสมุด N นี้จะทำให้มันยากที่จะนำมาใช้ห้องสมุดแต่ละอิสระจากส่วนที่เหลือ - ตัวอย่างเช่นในการทดสอบหน่วย
อย่างไรก็ตามในการประยุกต์ใช้คู่อย่างอิสระโดยการย้ายข้อมูลทั้งหมดไปยังรากองค์ประกอบที่ขึ้นกราฟจะรุนแรงบี้ :
ตามที่แสดงด้วยสีเขียวตอนนี้คุณสามารถใช้ไลบรารี Cซ้ำได้โดยไม่ต้องลากไปตามการอ้างอิงที่ไม่ต้องการ
อย่างไรก็ตามทั้งหมดที่กล่าวด้วย DI Containers จำนวนมากคุณไม่จำเป็นต้องเพิ่มการอ้างอิงที่ยากให้กับไลบรารีที่จำเป็นทั้งหมด แต่คุณสามารถใช้การผูกล่าช้าได้ทั้งในรูปแบบของการสแกนแอสเซมบลีตามแบบแผน (แนะนำ) หรือการกำหนดค่า XML
อย่างไรก็ตามเมื่อคุณทำเช่นนั้นคุณต้องอย่าลืมคัดลอกแอสเซมบลีไปยังโฟลเดอร์ bin ของแอปพลิเคชันเพราะจะไม่เกิดขึ้นโดยอัตโนมัติอีกต่อไป โดยส่วนตัวแล้วฉันไม่ค่อยพบว่ามันคุ้มค่ากับความพยายามเพิ่มเติม
รุ่นที่ซับซ้อนมากขึ้นของคำตอบนี้สามารถพบได้ในข้อความที่ตัดตอนมานี้จากหนังสือของฉันพึ่งพาการฉีดหลักการปฏิบัติรูปแบบ