अगर मैं DI कंटेनर का उपयोग नहीं कर रहा था, तो मुझे अपने MVC3 ऐप में EntityFramework लाइब्रेरी का संदर्भ नहीं देना होगा, केवल मेरी व्यावसायिक परत जो मेरे DAL / रेपो परत को संदर्भित करेगी।
हाँ, यह वही स्थिति है जिससे बचने के लिए DI इतनी मेहनत करता है :)
कसकर युग्मित कोड के साथ, प्रत्येक पुस्तकालय में केवल कुछ संदर्भ हो सकते हैं, लेकिन ये फिर से अन्य संदर्भ हैं, इस तरह निर्भरता का गहरा ग्राफ बनाते हैं:
क्योंकि निर्भरता का ग्राफ गहरा है, इसका मतलब है कि अधिकांश पुस्तकालयों को बहुत अधिक अन्य निर्भरताओं के साथ खींचते हैं - उदाहरण के लिए आरेख में, लाइब्रेरी सी के साथ लाइब्रेरी सी ड्रग्स , लाइब्रेरी ई, लाइब्रेरी जे, लाइब्रेरी एम, लाइब्रेरी के और लाइब्रेरी एन । इससे प्रत्येक पुस्तकालय को बाकी से स्वतंत्र रूप से पुन: उपयोग करना कठिन हो जाता है - उदाहरण के लिए इकाई परीक्षण में ।
हालाँकि, एक शिथिल युग्मित अनुप्रयोग में, कम्पोजीशन रूट के सभी संदर्भों को स्थानांतरित करके , निर्भरता ग्राफ गंभीर रूप से समतल होता है :
जैसा कि हरे रंग से दर्शाया गया है, अब किसी भी अवांछित निर्भरता के साथ खींचे बिना लाइब्रेरी सी का पुन: उपयोग करना संभव है ।
हालांकि, सभी यह है कि कई डि कंटेनरों के साथ, कहा, तुम नहीं करते है सभी आवश्यक पुस्तकालयों के लिए कठिन संदर्भ जोड़ने के लिए। इसके बजाय, आप कंवेंशन-आधारित असेंबली-स्कैनिंग (पसंदीदा) या XML कॉन्फ़िगरेशन के रूप में देर से बाध्यकारी का उपयोग कर सकते हैं ।
जब आप ऐसा करते हैं, हालाँकि, आपको असेंबली को एप्लिकेशन के बिन फ़ोल्डर में कॉपी करना याद रखना चाहिए, क्योंकि अब यह स्वचालित रूप से नहीं होता है। व्यक्तिगत रूप से, मैं शायद ही कभी इसे अतिरिक्त प्रयास के लायक पाता हूं।
इस उत्तर का अधिक विस्तृत संस्करण मेरी पुस्तक डिपेंडेंसी इंजेक्शन, सिद्धांत, अभ्यास, पैटर्न से इस अंश में पाया जा सकता है ।