मैं तर्क को यहां विभिन्न अन्य सवाल पढ़ा है के लिए सही रचना जड़ का पता लगाएँ, सबसे विशेष रूप से एक .NET पुस्तकालय
Dependency Inject (DI) “friendly” library
Ioc/DI - Why do I have to reference all layers/assemblies in entry application?
और इस article (और अन्य विभिन्न सामग्री) ।
हालांकि यह मुझे स्पष्ट नहीं है कि लाइब्रेरी (डीएलएल) .NET प्रोजेक्ट में रचना रूट को कहां रखा जाए। परियोजना लेख में उल्लिखित किसी भी विशिष्ट प्रकार से संबंधित नहीं है। डेस्कटॉप, कंसोल या यहां तक कि वेब एप्लिकेशन में इस बिंदु को स्पष्ट रूप से परिभाषित किया गया है।
मेरे वर्तमान दृष्टिकोण कंटेनर लपेट, रजिस्टर प्रकार और फिर से बेनकाब हल विधि के लिए है:
class DefaultBootstrapper : IBootstrapper {
public Bootstrapper() {
_container = new XXXContainer();
RegisterTypes(_container);
}
public T Resolve<T>() where T : class {
return _container.Resolve<T>();
}
// + other _container.Resolve() overloads
private readonly XXXContainer _container;
}
तब मैं जड़ उदाहरण बना करने के लिए पुस्तकालय की (जैसे आंतरिक कंस्ट्रक्टर्स परिभाषित) पुस्तकालय उपभोक्ताओं को रोकने के COMPOSITI का पता लगाने के लिए रोजगार की
class XYZFactory {
static XYZFactory() {}
private XYZFactory(IBootstrapper bootstrapper) {
_bootstrapper = bootstrapper;
}
public static XYZFactory Instance {
get { return Singleton; }
}
public ABCType CreateABCType(string param1) {
return _bootstrapper.Resolve<ABCType>(param1, _bootstrapper.Resolve<Dependency1>);
}
private static readonly XYZFactory Singleton = XYZFactory(new DefaultBootstrapper);
private readonly IBootstrapper _bootstrapper;
}
सवाल है, वहाँ एक बेहतर तरीका है या एक बेहतर पैटर्न: और इसलिए एक सिंगलटन कारखाने के उपयोग के लिए मजबूर कर रहा लाइब्रेरी प्रोजेक्ट में रूट पर?
मुझे खेद है कि मैं अभी भी वोट नहीं दे सकता (लेकिन मैं 15+ पर होगा)। जब मैं सिर्फ ** ढांचे के परिदृश्य में रूचि रखता था **, जब कंटेनर (यदि मौजूद है) _public इंटरफ़ेस_ से छिपा होगा, तो आपने मुझे कई अलग-अलग प्रस्तुत किए। क्या मैं आपको __poor-man-injection__ के बारे में तर्क (ब्लॉग आलेख या पुस्तक) को गहरा बनाने का संदर्भ कह सकता हूं कि पुन: प्रयोज्य पुस्तकालय उपयोगी होने के मामले में? धन्यवाद, फिर से – jay
मैं अपने तर्कों का बैकअप लेने के लिए किसी भी विशिष्ट कार्य का संदर्भ नहीं दे सकता, लेकिन सामान्य मार्क सीमैन की पुस्तक "डीईटीएंडेंसी इंजेक्शन इन .NET" में DI के बारे में सबसे अच्छा संदर्भ है, हालांकि यह मुख्य रूप से LOB परिदृश्य के बारे में बात करता है। आप स्रोत कोड माइक्रोसॉफ्ट एंटरप्राइज़ लाइब्रेरी देख सकते हैं। ईएल नोट करें एकता पर एक कठोर निर्भरता लेता है, और ऐसा कुछ है जो मुझे लगता है कि आपको पुन: प्रयोज्य लाइब्रेरी लिखते समय रोकने की कोशिश करनी चाहिए। – Steven
यह पुष्टि के रूप में लगता है कि _Dep। इंजेक्शन .NET_ मुझे एक आवश्यक पठन है। मैं इस तर्क में आगे बढ़ जाऊंगा, लेकिन, पुन: प्रयोज्य लाइब्रेरी प्रश्न पर लौटने पर, मुझे लगता है कि ** इस मामले में ** गरीब-इंजेक्शन ** (जैसा कि आप कहते हैं कि यह एक असाधारण है) सही डिजाइन विकल्प है। यह इकाई परीक्षण (** InternalsVisibleTo ** विशेषता के माध्यम से) सक्षम बनाता है और मेरे लिए यह एक केंद्रीय आवश्यकता है। – jay