मैं वर्तमान में NInject का उपयोग ठोस प्रकारों में इंटरफेस को बांधने और अपनी कक्षाओं में इंजेक्ट करने के लिए करता हूं। हालांकि, यह मेरी समझ है कि यह एक रन-टाइम संबंध है। मेरे लिए, यह हमले के एक बिंदु की तरह लगता है अगर कोई मेरे आवेदन के व्यवहार को बदलना चाहता था।संकलन-समय/पोस्ट-बिल्ड निर्भरता इंजेक्शन आईओसी?
क्या कोई ऐसी चीज है जो मुझे मेरे निर्भरता इंजेक्शन आईओसी को समय संकलित करने के लिए माइग्रेट करने की अनुमति देगी (पढ़ें: पोस्ट-बिल्ड आईएल बुनाई/प्रतिस्थापन)?
विस्तृत करने के
मेरे कोड मैं सेटअप में एक बाध्यकारी
Bind<IFoo>().To<Foo>()
Bind<Bar>().ToSelf().InSingletonScope();
ctor Foo(Bar dependency)
साथ अपने आवेदन की जड़ में (स्टार्ट-अप पर) मैं ग्राफ़
0 को हल करेंमान लें कि मेरे पास कोई सेवा लोकेटर (anti-pattern anyway right?) है। तो अब मेरे पास kernel
के लिए कोई उपयोग नहीं है।
अब मैं "पोस्ट-बिल्ड रिलीज-कंपाइल" रखना चाहता हूं जो कर्नेल के रिज़ॉल्यूशन इंजन को इंस्टेंसिएटर, या निरंतर/सिंगलटन के संदर्भों के साथ प्रतिस्थापित करता है, जैसे कि मेरा कोड इस तरह दिखता है;
var foo = kernel.Get<IFoo>();
हकीकत में, मेरा अंतिम निर्माण के चरण में आईएल प्रतिस्थापन के बाद, यह इस तरह दिखता है:
var bar = new Bar();
var foo = new Foo(bar);
और Ninject के लिए कोई संदर्भ अब और नहीं है।
इस प्रश्न के लिए मेरा तर्कसंगत यह है कि मैं आईएल वीव के लिए Fody का उपयोग कर रहा हूं, मेरी सारी संपत्ति बदलकर raisers और मैं सोच रहा हूं कि निर्भरता इंजेक्शन के लिए कुछ ऐसा करना संभव होगा।
क्या xml या कोड में निंजा निर्भरता पंजीकरण हैं? –
क्या आप कृपया विस्तार से समझा सकते हैं कि संकलन समय इंजेक्शन क्या है? –
मुझे लगता है कि आपके DI के लिए कॉन्फ़िगरेशन मॉड्यूल के माध्यम से कोड में किया जाता है। इसलिए यदि आप रनटाइम के दौरान DI hookup होता है तो भी आप संकलन समय सुरक्षा प्राप्त कर सकते हैं। हालांकि, यह एक स्पर्शरेखा पर जा रहा है, अगर हम उस समस्या को देखते हैं जिसे आप आगे बढ़ा रहे हैं ** मेरा डी रनटाइम पर होता है लेकिन मैं चाहता हूं कि यह संकलन समय ** पर हो, आप पहली जगह पर निर्भरता इंजेक्शन का उपयोग क्यों करना चाहेंगे ? आप मॉड्यूल को भी हटा सकते हैं और केवल मैन्युअल रूप से कार्यान्वयन के लिए उदाहरण या कारखानों को असाइन कर सकते हैं ताकि कोई रनटाइम * हमला * बिंदु न हो। मेरे लिए डीआई का उपयोग करने का आधा कारण रनटाइम कॉन्फ़िगरेशन प्राप्त करना है – Grofit