2009-08-17 6 views
5

कैसल विंडसर कंटेनर के साथ एक घटक दो अलग-अलग इंटरफेस लागू करने के लिए संभव है और फिर उसी घटक उदाहरण को वापस करने के लिए इसे हल करते समय? उदाहरण के लिए;क्या महल विंडसर कंटेनर 2 इंटरफेस को लागू करने वाले घटक का एक ही उदाहरण लौटा सकता है

var windsor = new WindsorContainer() 
    .AddComponent<InterfaceA, ClassAB>() 
    .AddComponent<InterfaceB, ClassAB>(); 

var classAB1 = windsor.Resolve<InterfaceA>(); 
var classAB2 = windsor.Resolve<InterfaceB>(); 

Assert.AreSame(classAB1, classAB2); 

के रूप में दिखाया मैं संदेश साथ एक अपवाद मिलता है मैं यह कोशिश एक घटक तो यह वर्ग ClassAB की दो अलग-अलग उदाहरणों रिटर्न अगर मैं अलग चाबियाँ प्रदान करते हैं पहले से ही, यह देखते हुए प्रमुख के लिए पंजीकृत नहीं है।

संपादित करें: आदर्श रूप में मैं इसे एक कॉन्फ़िगरेशन फ़ाइल में करना चाहता हूं।

+0

प्रश्न विंडसर पूछे जाने वाले प्रश्न के लिए कहा: http://using.castleproject.org/display/IoC/FAQ –

उत्तर

11
[TestFixture] 
public class Forwarding { 
    public interface InterfaceA {} 

    public interface InterfaceB {} 

    public class ClassAB: InterfaceA, InterfaceB {} 

    [Test] 
    public void tt() { 
     var container = new WindsorContainer(); 
     container.Register(Component.For<InterfaceA, InterfaceB>().ImplementedBy<ClassAB>()); 
     var a = container.Resolve<InterfaceA>(); 
     var b = container.Resolve<InterfaceB>(); 
     Assert.AreSame(a, b); 
    } 
} 
+0

ओह एक बी का बेटा ... वास्तव में? तुम यह कर सकते हो? भगवान उन कामकाजों को जानता है जिनके साथ मैं आया हूं। –

+0

उत्तर के लिए धन्यवाद, यह बहुत अच्छा लग रहा है लेकिन लक्ष्य पदों को स्थानांतरित करने के लिए बस आपको पता है कि कॉन्फ़िगरेशन फ़ाइल में ऐसा करना भी संभव है? – Gareth

+0

हां, यह संभव है। Http://stackoverflow.com/questions/274220 –

1

मैं इस के लिए एक समाधान पता है - यह बहुत की तरह किया जा सकता है:

var someInstance = new Instance(); 
var container = new WindsorContainer(); 

container.Register(Component.For(typeof(IFirstInterface)).Instance(someInstance)); 
container.Register(Component.For(typeof(ISecondInterface)).Instance(someInstance)); 

... लेकिन फिर आप कंटेनर की Instance वर्ग का दृष्टांत करने की क्षमता खो, इसलिए इसकी निर्भरता स्वतः हल नहीं किया जा जाएगा। बेशक, अगर आपके उदाहरण में कोई निर्भरता नहीं है, तो शायद आपको इसकी परवाह नहीं है।