2009-06-04 17 views
18

मैं Injection by Hand और Ninjection (साथ ही Why use Ninject) पर पढ़ रहा था। मैं भ्रम के दो टुकड़े का सामना करना पड़ा:निर्भरता इंजेक्शन फ्रेमवर्क: मुझे परवाह क्यों है?

  1. हाथ तकनीक मैं पहले से ही से परिचित हूँ द्वारा इंजेक्षन, लेकिन मैं Ninjection से परिचित नहीं हूँ, और इस तरह यकीन है कि कैसे पूरा कार्यक्रम काम करेगा नहीं हूँ। शायद यह है, बजाय एक पूरा कार्यक्रम प्रदान करने के लिए के रूप में उस पृष्ठ पर किया जाता है, एक कार्यक्रम टुकड़े

  2. मैं अभी भी वास्तव में नहीं मिलता है में टूट दिखा कि यह कैसे चीजों को आसान बना देता है में मदद मिलेगी। मुझे लगता है कि मुझे कुछ महत्वपूर्ण याद आ रहा है। मैं देख सकता हूं कि इंजेक्शन फ्रेमवर्क कैसे सहायक होगा यदि आप इंजेक्शन का समूह बना रहे थे और फिर दो बड़े समूहों के बीच स्विच कर रहे थे (यह अन्य चीजों के साथ मजाक करने के लिए उपयोगी है), लेकिन मुझे लगता है कि इसके लिए और भी कुछ है उससे। लेकिन मुझे यकीन नहीं है कि क्या। या शायद मुझे इस बात के और उदाहरण चाहिए कि यह घर बिंदु को चलाने के लिए रोमांचक क्यों है।

+1

मैं अभी भी क्यों आप मैन्युअल रूप से सुई – Casebash

उत्तर

6

डी ढांचे के बिना आपकी निर्भरताओं को इंजेक्शन देते समय आप अपने आवेदन पर तीर कोड के साथ समाप्त होते हैं, कक्षाओं को उनकी निर्भरताओं को कैसे बनाया जाए।

public Contact() 
     : this(new DataGateWay()) 
    { 
    } 

लेकिन अगर आप Ninject की तरह कुछ का उपयोग करें, सभी तीर कोड एक स्थान यह आसान इसे का उपयोग सभी वर्गों के लिए निर्भरता को बदलने के लिए कर रही है।

internal class ProductionModule : StandardModule 
{ 
    public override void Load() 
    { 
     Bind<IDataGateway>().To<DataGateWay>(); 
    } 
} 
1

निर्भरता सबसे चौखटे का उपयोग कर इंजेक्शन कार्यावधि में विन्यस्त किया जा सकता, एक recompile की आवश्यकता के बिना।

+0

मुझे नहीं लगता कि वास्तव में सच है नहीं चाहेगा नहीं मिलता है: आम तौर पर यह तैनाती समय में बदलाव किया जा सकता है; या सामान्य रूप से, बिना किसी संकलन के। मैं मतलब, तारों रनटाइम के दौरान किया जाता है, लेकिन यह अभी भी आम तौर पर स्थिर है। – StaxMan

2

मैं वास्तव में कुछ चौखटे के autowiring पहलू ... जब आप अपने प्रकार instantiated करने की आवश्यकता के बारे में परवाह करने की जरूरत नहीं है।

संपादित करें: मैंने this article by Ayende @ Rahien पढ़ा। और मैं वास्तव में उसके बिंदु का समर्थन करता हूं।

+0

आप और अधिक विस्तार में इस की व्याख्या कर सकते हैं? – Brian

0

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

3

यह आपको किसी विशेष कोड ब्लॉक के लिए आवश्यक इंटरफेस का मज़ाक उड़ाकर आसानी से अपने कोड का परीक्षण करने की अनुमति देता है। यह आपको कोड के अन्य हिस्सों को तोड़ने के बिना कार्यक्षमता को आसानी से स्वैप करने की अनुमति देता है।

यह समेकन और युग्मन के बारे में है।

आप शायद छोटी परियोजनाओं पर लाभ नहीं देख सकेंगे, लेकिन आप व्यवस्था करने के लिए परिवर्तन करने की आवश्यकता है जब एक बार आप अतीत कम होने पर यह वास्तव में स्पष्ट हो जाता है। जब आप DI का उपयोग करते हैं तो यह एक हवा है।

+0

+1 एकता और युग्मन उल्लेख के लिए - मुझे लगता है कि निर्भरता इंजेक्शन का उपयोग करने का मूल विचार है - घटक है कि अत्यधिक एकजुट लेकिन शिथिल युग्मित विकसित कर रहे हैं। –

0

निर्भरता इंजेक्शन Component Driven Development लिए आवश्यक है। उत्तरार्द्ध वास्तव में जटिल अनुप्रयोगों को अधिक कुशल और विश्वसनीय तरीके से बनाने की अनुमति देता है।

इसके अलावा, यह अन्य कोड से सामान्य रूप से सामान्य क्रॉस-कटिंग चिंताओं को अलग करने की अनुमति देता है (यह परिणाम अधिक पुन: प्रयोज्य और लचीला कोडबेस में होता है)।

संबंधित लिंक:

4

मैं अभी भी वास्तव में नहीं मिलता है कि यह कैसे चीजों को आसान बना देता है। मुझे लगता है कि मुझे कुछ महत्वपूर्ण याद आ रहा है।

नहीं यह बहुत अच्छा होगा अगर हम केवल असतत घटकों जहां प्रत्येक विशिष्ट कार्यक्षमता हम आसानी से समझ सकता है, फिर से उपयोग करने और बनाए रखने प्रदान की विकसित करने के लिए किया था। हम कहाँ केवल घटकों पर काम किया।

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

तो एक आईओसी ढांचा प्रबंधन निर्भरताओं या परीक्षण या कॉन्फ़िगरेशन के प्रबंधन नहीं है। इसके बजाय यह के बारे में प्रबंध जटिलता, केवल काम करने के लिए सक्षम बनाने और घटकों के बारे में सोचने के द्वारा होता है।

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