का उपयोग कर निर्भरता संपत्ति सुई मैं निम्नलिखित श्रेणियां होती हैं:कैसे Ioc एकता
public interface IServiceA
{
string MethodA1();
}
public interface IServiceB
{
string MethodB1();
}
public class ServiceA : IServiceA
{
public IServiceB serviceB;
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
public class ServiceB : IServiceB
{
public string MethodB1()
{
return "MethodB1() ";
}
}
मैं आईओसी के लिए एकता का उपयोग करें, मेरी पंजीकरण इस तरह दिखता है:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
जब मैं एक ServiceA
उदाहरण को हल, serviceB
null
होगा। मैं इसे कैसे हल कर सकता हूं? यहां कम से कम
यदि आपके पास कन्स्ट्रक्टर और प्रॉपर्टी इंजेक्शन के बीच कोई विकल्प है, तो मुझे लगता है कि आपको कन्स्ट्रक्टर इंजेक्शन चुनना चाहिए। संपत्ति इंजेक्शन कक्षा को एकता या कुछ अन्य कॉलर 'याद रखने' पर निर्भर करेगा कि उन्हें उस निर्भरता की आपूर्ति करने की आवश्यकता है। कन्स्ट्रक्टर इंजेक्शन कक्षा को उपयोग करने की कोशिश कर रहे किसी भी व्यक्ति को स्पष्ट करता है कि वर्ग के लिए निर्भरता आवश्यक है। – Carlos
और यदि कक्षा में कई निर्भरताएं हैं, तो कुछ निश्चित कॉलों में इसकी आवश्यकता नहीं है? क्या वे सभी तत्काल होंगे? या जब वे ऊपर की तरह पहुंचे, तो उन्हें केवल तत्काल किया जाएगा: serviceB.method()? @ करलोस – Legends
@ आपकी सभी निर्भरताओं को सूचीबद्ध किया जाएगा जब सर्विसए बनाया जाता है तब भी इंजेक्ट किया जाएगा जब आप उन्हें अपनी सभी विधि में उपयोग नहीं करते हैं। एकता बॉक्स के बाहर आलसी तत्कालता का समर्थन नहीं करती है लेकिन इसे एक्सटेंशन के रूप में जोड़ा जा सकता है: http://pwlodek.blogspot.hu/2010/05/lazy-and-ienumerable-support-comes-to.html – nemesv