2011-01-04 14 views
30

के बीच का अंतर संभव डुप्लिकेट है:
Inversion of Control < Dependency Injectionकहाँ वास्तव में आईओसी और डि

मैं हमेशा उसी संदर्भ में आईओसी (नियंत्रण के उलट) और डि (निर्भरता इंजेक्शन) पढ़ें। आईओसी और डीआई के बीच वास्तव में क्या अंतर है? आईओसी DI से अलग कैसे है?

+1

डुप्लिकेट: http://stackoverflow.com/questions/3226605/inversion-of-control- निर्भरता- इंजेक्शन –

+2

सी # टैग वास्तव में यहां आवश्यक नहीं है – KNU

उत्तर

59

सामान्य उपयोग में, शब्द कुछ हद तक समानार्थी बन गए हैं। आईओसी का मूल विचार - नियंत्रण का उलटा - "हॉलीवुड सिद्धांत:" से बहुत अधिक संबंधित था, हमें कॉल न करें, हम आपको पर कॉल करेंगे।

पारंपरिक अनुप्रयोगों में, डेवलपर व्यवसाय कोड और फ्रेमवर्क कोड लिखेंगे। फिर व्यवसाय कोड कार्यों को पूरा करने के लिए फ्रेमवर्क कोड को कॉल करेगा। एक आईओसी मॉडल के तहत, आप उस मॉडल को "उलटा" करते हैं और एक ढांचा तैयार करते हैं जो व्यवसाय मॉड्यूल स्वीकार करता है और उन्हें कार्यों को पूरा करने के लिए कहता है। यह सिद्धांत कई विकास ढांचे में प्रदर्शित किया गया है जिसमें पुराने स्मार्ट क्लाइंट सॉफ्टवेयर फैक्टरी और नए प्रिज्म (या WPF/Silverlight के लिए समग्र अनुप्रयोग) शामिल हैं। इन मॉडलों में, यूआई मॉड्यूल एक आईओसी कंटेनर के साथ पंजीकृत होते हैं और कॉन्फ़िगरेशन और उपयोगकर्ता क्रियाओं के आधार पर आवश्यकतानुसार लोड होते हैं। शक्तिशाली होने पर, इन मॉडलों में भी बहुत सी सीखने की वक्र होती है।

निर्भरता इंजेक्शन एक तकनीक (वास्तविक रूप से इसे एक पैटर्न कहने के लिए मुश्किल है) को निर्भर करता है कि निर्भर वस्तुओं से कक्षा/विधि में बाहरी कॉलर द्वारा इंजेक्शन की अनुमति देकर कार्यान्वयन से आंतरिक निर्भरता को हटाया जा सके। आईओसी फ्रेमवर्क उपयोगकर्ता मॉड्यूल और अन्य आश्रित कोड को फ्रेमवर्क रूटीन को आपूर्ति करने के लिए निर्भरता इंजेक्शन का उपयोग करते हैं जो "इसे सभी को एक साथ चिपकाएं।" निर्भरता इंजेक्शन का उपयोग आईओसी ढांचे द्वारा भारी रूप से किया जाता है क्योंकि यह वह तंत्र है जो उन्हें "आपको कॉल करने" की अनुमति देता है।

आईओसी कंटेनर, जैसे कि कैसल विंडसर और संरचना मानचित्र, आपके द्वारा पंजीकृत कक्षाओं के स्वचालित तत्कालता और जीवन चक्र प्रबंधन प्रदान करके निर्भरता इंजेक्शन के साथ सहायता करते हैं - जिसमें स्वचालित प्रतिस्थापन और पंजीकृत कक्षाओं द्वारा आवश्यक पैरामीटर का इंजेक्शन शामिल है। यह सब निर्भरता इंजेक्शन का उपयोग करना आसान बनाता है, लेकिन इसकी आवश्यकता नहीं है।

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

तो, आईओसी वास्तव में व्यापक सिद्धांत है और डी भीतर एक मौलिक तकनीक है। आईओसी (हॉलीवुड सिद्धांत) सिस्टम बहुत जटिल होते हैं, समझने में मुश्किल हो सकती है, और इस तरह सीधी सीखने की वक्र होती है। दूसरी ओर, डीआई हर रोज डेवलपर्स के लिए एक अच्छा अभ्यास है। मैं शांत, लेकिन जटिल पर समझने योग्य और स्पष्ट पसंद करते हैं।

+0

+1 अच्छा स्पष्टीकरण –

+0

बहुत अच्छी व्याख्या! धन्यवाद! –

+0

वास्तव में सहायक! –

41

आईओसी एक अनुबंध के कार्यान्वयन में बदलाव करने की क्षमता है।

DI कार्यान्वयन की आपूर्ति करने की क्षमता है।

+0

यह सबसे अच्छा स्पष्टीकरण है, धन्यवाद! – formatc

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