शायद यह आसान है, लेकिन यह इंटरनेट पर खोज कर पहले से ही मुझे एक सिर दर्दकैसल विंडसर - कैसे निर्माता इंजेक्शन नाम दिया गया है उदाहरण मैप करने के लिए
यहाँ समस्या है दे:
interface IValidator
{
void Validate(object obj);
}
public class ValidatorA : IValidator
{
public void Validate(object obj) { }
}
public class ValidatorB : IValidator
{
public void Validate(object obj) { }
}
interface IClassA { }
interface IClassB { }
public class MyBaseClass
{
protected IValidator validator;
public void Validate()
{
validator.Validate(this);
}
}
public class ClassA : MyBaseClass, IClassA
{
//problem: validator should ValidatorA
public ClassA(IValidator validator) { }
}
public class ClassB : MyBaseClass, IClassB
{
//problem: validator should ValidatorB
public ClassB(IValidator validator) { }
}
public class OtherClass
{
public OtherClass(IClassA a, IClassB b) { }
}
//on Main
var oc = container.Resolve<OtherClass>();
किसी भी विचार?
संपादित
मैं Named
साथ ValidatorA
और ValidatorB
पंजीकृत, अब समस्या यह है कि महल विंडसर ClassA
और ClassB
करने के लिए उन सत्यापनकर्ता ठीक से इंजेक्षन कर सकते हैं, वहाँ है कि करने के लिए एक तरीका है? या कोई बेहतर समाधान है?
अगर कोई सोचता है कि मेरी कक्षा का डिज़ाइन गलत है, तो मैं किसी भी सलाह के लिए खोलता हूं। अब तक मुझे लगता है कि यह सही है। हां, वैधकर्ता के पास विशिष्ट वर्ग के लिए विशिष्ट विन्यास है। लेकिन इसके कारण हैं:
- वैलिडेटर एक जटिल वस्तु है, कभी-कभी डेटाबेस से कनेक्ट होना चाहिए, इसलिए मुझे यूनिट परीक्षण कारण के लिए कन्स्ट्रक्टर के कार्यान्वयन के बजाय इंटरफ़ेस पास करना होगा।
- कोई रास्ता नहीं सत्यापनकर्ता से किसी के लिए अलग इंटरफेस का उपयोग करने, क्योंकि एकमात्र तरीका है कि मैं का इस्तेमाल किया
Validate
- है मुझे लगता है कि
MyBaseClass.Validate()
एक आम टेम्पलेट विधि पैटर्न नहीं है यह?
समस्या का आपका विवरण सार तत्व है। –
यदि कक्षा ए को IValidator के विशिष्ट कार्यान्वयन की आवश्यकता है, तो डिज़ाइन गलत है, क्योंकि इंटरफ़ेस कोई उपयोगी अमूर्तता प्रदान नहीं करता है। –
@ जेसेक ग्रोगन, मुझे केवल 'मान्य' विधि की आवश्यकता नहीं है, वास्तव में क्लास और क्लासबी का बेसक्लास है जिसे 'मान्य' विधि कहा जाता है। लेकिन मैं इसे जटिलता को छिपाने के लिए यहां नहीं लिखता हूं। – ktutnik