2011-12-09 9 views
9

इस प्रश्न के आधार पर: Should thoses kind of service go injected in a base class ? (versus static classes)निनजेक्ट का उपयोग करके सजावटी के साथ बाध्यकारी कैसे किया जाता है?

निनजेक्ट का उपयोग करके सजावटी के साथ बाध्यकारी कैसे किया जाएगा? या किसी भी DIContainer?

public class CachedLoggedRepository : IRepository 
{ 
    public IRepository repository { get; set; } 
    void Add(); 
} 

public class CachedRepository : IRepository 
{ 
    public IRepository repository { get; set; } 
    void Add(); 
} 

public class Repository : IRepository 
{ 
    void Add(); 
} 

उत्तर

15

आप सशर्त बाइंडिंग का उपयोग करने के लिए इस अद्भुत जवाब के लिए उदाहरण के लिए:

Bind<IRepository>().To<Repository>().WhenInjectedInto<CachedRopsitory>(); 
Bind<IRepository>().To<CachedRepository>().WhenInjectedInto<CachedLoggedRepository>(); 
Bind<IRepository>().To<CachedLoggedRepository>(); 
+1

धन्यवाद किया है। – Rushino

+2

+1 और कुछ (बहुत दुर्लभ) मामलों में, आप एक सामान्य-आधारित 'TImpl' का उपयोग कर रहे हैं, जिस स्थिति में आप' बाइंड >()। () 'ऊपर के रूप में - उस मामले में आप कंक्रीट प्रकार के बेस जेनेरिक प्रकार के आधार पर इंजेक्शन किए जाने पर थोड़ा अलग '.hen' ... खंड जो [बाधा] (https://github.com/ninject/ninject/wiki/Contextual- बाइंडिंग) का उपयोग करें। ध्यान में रखना एक और उपयोगी बात यह है कि यदि आपको कभी पता चलता है कि आपको कुछ आवश्यक चीज़ों के लिए थोड़ा अलग चाहिए, तो आपको निंजा स्रोत मिल जाएगा और उदाहरणों को ढूंढने के लिए फाइलों/स्थैतिक विश्लेषण में खोजें - उदा। 'WhenInjectedInto' –

+0

पर देखें जब आप सम्मेलन द्वारा एकाधिक निर्भरताओं को कॉन्फ़िगर करना चाहते हैं तो यह कैसे किया जा सकता है? – Rookian

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