16

मैं समझने की कोशिश कर रहा हूं कि जब मुझे निर्भरता इंजेक्शन मैन्युअल रूप से इंजेक्शन बनाम कंटेनर का उपयोग करना चाहिए। यदि मेरे पास एक ऐसा एप्लीकेशन है जो 1-2 इंटरफेस का उपयोग करता है और प्रत्येक इंटरफ़ेस के लिए केवल 1-2 ठोस कार्यान्वयन होते हैं, तो मैं इसे स्वयं संभालने की ओर झुकता हूं।आईओसी कंटेनर का उपयोग कब करें?

यदि मेरे पास एक छोटा सा एप्लीकेशन है जो 2-3 इंटरफेस का उपयोग करता है और प्रत्येक इंटरफ़ेस में 2-3 ठोस कार्यान्वयन होते हैं, तो क्या मुझे एक पूर्ण उड़ा कंटेनर का उपयोग करना चाहिए? this जैसे कुछ आसान कुछ होगा?

असल में मैं समझने की कोशिश कर रहा हूं कि इन निर्भरताओं को मैन्युअल रूप से संभालने के लिए उचित है, जब (या यदि) मुझे ऊपर की तरह कुछ सरल उपयोग करना चाहिए, और जब आईएनसी कंटेनर जैसे निनजेक्ट, विंडसर, आदि का उपयोग करना चाहिए ... ऐसा कुछ भी इस पर कुछ लगाने के लिए उचित नहीं हो सकता है, लेकिन मैं आईओसी कंटेनर का उपयोग करने का समय कैसे बता सकता हूं?

+0

http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code –

+0

मैं कारण है कि मैं का उपयोग करना चाहिए नहीं पूछ रहा हूँ एक, मैं पूछ रहा हूं कि मुझे कब उपयोग करना चाहिए। मुझे पहले से ही लाभों के बारे में पता है, लेकिन मैं इस बारे में अनिश्चित हूं कि एक का उपयोग करने का सही समय कब है। – nivlam

उत्तर

14

यहां महसूस करने की महत्वपूर्ण बात यह है कि आप DI-friendly, but container-agnostic तरीके से अपना कोड लिख सकते हैं (और चाहिए)।

इसका मतलब है कि आपको हमेशा निर्भरताओं की संरचना को उस बिंदु पर धक्का देना चाहिए जहां आप इसे अब और अधिक नहीं रोक सकते हैं। इसे Composition Root कहा जाता है और अक्सर एप्लिकेशन के प्रवेश बिंदु के पास रखा जाता है।

यदि आप इस तरह से अपना आवेदन डिज़ाइन करते हैं, तो डी कंटेनर (या कोई डी कंटेनर) की आपकी पसंद आपके आवेदन में एक ही स्थान के आसपास घूमती है, और आप रणनीति को जल्दी से बदल सकते हैं।

यदि आप केवल कुछ ही निर्भरता है गरीब आदमी की डि उपयोग करने के लिए चुन सकते हैं, या आप एक पूर्ण विकसित डि कंटेनर उपयोग करने के लिए चुन सकते हैं। इस फैशन में प्रयुक्त, आपके पास किसी भी विशेष डी कंटेनर पर निर्भरता नहीं होगी, इसलिए रखरखाव के मामले में विकल्प कम महत्वपूर्ण बन जाता है।

एक डी कंटेनर ऑब्जेक्ट आजीवन समेत पूर्णता का प्रबंधन करने में आपकी सहायता करता है। यहां वर्णित की तरह प्रयुक्त, यह कुछ भी नहीं करता है जिसे आप हाथ में नहीं लिख सकते थे, लेकिन यह बेहतर और अधिक संक्षेप में करता है। इस प्रकार, एक डी कंटेनर का उपयोग शुरू करने के लिए मेरी दहलीज बहुत कम होगी।

मैं कुछ निर्भरताओं से पहले एक डी कंटेनर का उपयोग करना शुरू कर दूंगा। ।


अपडेट: मेरे November 2012 answer to that question

संबंधित मुद्दे