के साथ एक ही प्रकार के एकाधिक कन्स्ट्रक्टर पैरामीटर इंजेक्शन करना मैं अपने ऐप्स में से एक में DI को संभालने के लिए निनजेक्ट 2.0 का उपयोग कर रहा हूं और मैं कुछ ऐसा कर रहा हूं जो मुझे भ्रमित कर रहा है। शून्य दस्तावेज़ीकरण होने से ईमानदार होने में बहुत मदद नहीं मिलती है।निनजेक 2.0
ctor(IServiceFactory factory1, IServiceFactory factory2)
{
this.factory1 = factory1;
this.factory2 = factory2;
}
हालांकि इन दो सेवाओं को एक ही इंटरफ़ेस को लागू है, वे काफी अलग कार्यान्वयन हैं और अलग अलग समय पर उपयोग किया जाता है तो मैं एक IEnumerable<IServiceFactory>
इंजेक्षन नहीं करना चाहते -
मैं हस्ताक्षर के साथ एक निर्माता है कहो ।
मेरा सवाल यह है कि, जब मैं उदाहरणों को बाध्य कर रहा हूं, तो मैं निनजेक्ट को कैसे बता सकता हूं कि प्रत्येक के लिए इंजेक्ट करना क्या है?
अग्रिम धन्यवाद।
अद्यतन
कोड को देखने के लिए इच्छुक किसी की खातिर Remo के लिंक को पढ़ने के बाद खत्म हो जाएगा के लिए, ... यहाँ यह संक्षिप्त में है। (मैं कभी नहीं महसूस किया सी # पैरामीटर गुण था!)
//abstract factory
public interface IServiceFactory
{
Service Create();
}
//concrete factories
public class Service1Factory : IServiceFactory
{
public IService Create()
{
return new Service1();
}
}
public class Service2Factory : IServiceFactory
{
public IService Create()
{
return new Service2();
}
}
//Binding Module (in composition root)
public class ServiceFactoryModule : NinjectModule
{
public override void Load()
{
Bind<IServiceFactory>()
.To<Service1Factory>()
.Named("Service1");
Bind<IServiceFactory>()
.To<Service2Factory>()
.Named("Service2");
}
}
//consumer of bindings
public class Consumer(
[Named("Service1")] service1Factory,
[Named("Service2")] service2Factory)
{
}
धन्यवाद Remo: यह कैसे किया जाता के बारे में दस्तावेज़ देखें। वे वास्तव में एक अमूर्त कारखाने के विभिन्न कार्यान्वयन हैं जो यूआई में टैब बनाते हैं ताकि वे वही काम कर सकें ... केवल विभिन्न कारणों से। – Stimul8d
मुझे लगता है कि आप सही ढंग से समझ में नहीं आया। उपभोक्ता के बिंदु से वे एक ही बात नहीं करते हैं। इंटरफ़ेस को उपभोक्ता के परिप्रेक्ष्य से परिभाषित किया जाना चाहिए। जैसे यदि आपके पास फैक्ट्री इंटरफ़ेस 'फलों CreateFruit() 'है और उपभोक्ता को दो कार्यान्वयन की उम्मीद है कि केले के लिए एक और संतरे के लिए एक तो आपको इंटरफ़ेस को' केला बनाएंबाना() 'और' ऑरेंज CreateOrange() 'के रूप में परिभाषित करना चाहिए, भले ही आपको आवश्यकता हो उन्हें केवल फल के रूप में। –
मैं देखता हूं। आप सुझाव दे रहे हैं कि मैं कंक्रीट फैक्ट्री कक्षाओं के साथ एक अमूर्त कारखाने के बजाय कारखाने के तरीकों का उपयोग करता हूं। यह एक विकल्प है लेकिन फैक्ट्री कक्षाओं में स्वयं निर्भरताएं हैं (इस मामले में उप-स्क्रीन) जिन्हें इंजेक्शन देने की आवश्यकता है। कारखाने के तरीकों के बजाय कंक्रीट कारखानों और कन्स्ट्रक्टर इंजेक्शन के साथ उन निर्भरताओं को हल करना बहुत आसान है, न कि उनके पास कुछ अन्य जादू है जो मुझे याद आ रही है? – Stimul8d