Ninject मॉड्यूल आईओसी कंटेनर के साथ विभिन्न प्रकार के रजिस्टर करने के लिए इस्तेमाल किया उपकरण हैं। लाभ यह है कि इन मॉड्यूल को तब अपनी कक्षाओं में रखा जाता है। यह आपको अपने मॉड्यूल में विभिन्न स्तरों/सेवाओं को रखने की अनुमति देता है।
// some method early in your app's life cycle
public Kernel BuildKernel()
{
var modules = new INinjectModule[]
{
new LinqToSqlDataContextModule(), // just my L2S binding
new WebModule(),
new EventRegistrationModule()
};
return new StandardKernel(modules);
}
// in LinqToSqlDataContextModule.cs
public class LinqToSqlDataContextModule : NinjectModule
{
public override void Load()
{
Bind<IRepository>().To<LinqToSqlRepository>();
}
}
एकाधिक मॉड्यूल होने से आपके आईओसी कंटेनर में भी चिंताओं को अलग करने की अनुमति मिलती है।
आप में से बाकी सवाल यह है कि यह आईओसी और डीआई के बारे में अधिक है, न कि केवल निनजेक। हां, आप आईओसी कंटेनर के बारे में सब कुछ करने के लिए स्थिर कॉन्फ़िगरेशन ऑब्जेक्ट्स का उपयोग कर सकते हैं। आईओसी कंटेनर वास्तव में अच्छा हो जाते हैं जब आपके पास निर्भरता के एकाधिक पदानुक्रम होते हैं।
public interface IInterfaceA {}
public interface IInterfaceB {}
public interface IInterfaceC {}
public class ClassA : IInterfaceA {}
public class ClassB : IInterfaceB
{
public ClassB(IInterfaceA a){}
}
public class ClassC : IInterfaceC
{
public ClassC(IInterfaceB b){}
}
बिल्डिंग क्लाससी इस बिंदु पर इंटरफेस की कई गहराई के साथ एक दर्द है। केवल कर्नेल से IInterfaceC के लिए पूछना बहुत आसान है।
var newc = ApplicationScope.Kernel.Get<IInterfaceC>();
स्रोत
2010-01-13 12:18:30
LinqToSqlDataContextModule मानक मॉड्यूल का विस्तार करना चाहिए? –
@ मार्क गिबाद निनजेक्ट में नहीं 2. मानक मॉड्यूल चला गया है और निनजेक्टमुडूल के साथ प्रतिस्थापित किया गया है - http://github.com/enkari/ninject/tree/master/src/Ninject/Modules/ –
यह एक अच्छा उदाहरण है, लेकिन टेस्टेबिलिटी के बारे में क्या? मैं लगातार सुनता हूं कि एक डीआई/आईओसी कंटेनर मुझे टेस्टेबिलिटी के साथ कैसे मदद कर सकता है, लेकिन मुझे एक वास्तविक उदाहरण खोजने में कठिनाई हो रही है जो दिखाएगा कि निनजेक्ट मेरे कोड को प्रदूषित नहीं करेगा और टेस्टेबिलिटी की सुविधा भी देगा। क्या कोई वास्तविक दुनिया ओपन सोर्स प्रोजेक्ट है जो मैं विचार पाने के लिए देख सकता हूं? –