2010-05-01 18 views
5

कुछ मामलों पर विचार करें:कैसल विंडसर में, क्या मैं एक इंटरफ़ेस घटक पंजीकृत कर सकता हूं और कार्यान्वयन की प्रॉक्सी प्राप्त कर सकता हूं?

_windsor.Register(Component.For<IProductServices>().ImplementedBy<ProductServices>().Interceptors(typeof(SomeInterceptorType)); 

इस मामले में, जब मैं एक IProductServices विंडसर के लिए पूछता हूं इंटरफ़ेस विधि कॉल को अवरुद्ध करने के लिए इंटरफ़ेस प्रॉक्सी करेगा। यदि इसके बजाय मैं यह करता हूं:

_windsor.Register(Component.For<ProductServices>().Interceptors(typeof(SomeInterceptorType)); 

तो मैं आईपॉडक्ट सर्विसेज को हल करने के लिए विंडसर के लिए नहीं पूछ सकता, इसके बजाय मैं उत्पाद सेवा के लिए पूछता हूं और यह एक गतिशील सबक्लास लौटाएगा जो वर्चुअल विधि कॉल को रोक देगा। बेशक गतिशील उपclass अभी भी 'IProductServices'

लागू करता है मेरा प्रश्न है: क्या मैं पहले मामले की तरह इंटरफ़ेस घटक पंजीकृत कर सकता हूं, और दूसरे मामले में उपclass प्रॉक्सी प्राप्त कर सकता हूं?

मुझे यह करने के लिए दो कारण हैं:
1 - क्योंकि जो कोड हल करने जा रहा है, वह उत्पाद सेवा वर्ग के बारे में नहीं जानता, केवल आईपॉडक्ट सर्विसेज इंटरफ़ेस के बारे में। 2 - चूंकि प्रेषक को पैरामीटर के रूप में पास करने वाले कुछ ईवेंट आमंत्रण, उत्पाद सेवा ऑब्जेक्ट को पास करेंगे, और पहले मामले में यह ऑब्जेक्ट गतिशील प्रॉक्सी पर एक फ़ील्ड है, न कि विंडसर द्वारा लौटाई गई वास्तविक वस्तु। मुझे यह उदाहरण दें कि यह चीजों को कैसे जटिल कर सकता है: आइए कहें कि मेरे पास एक कस्टम संग्रह है जो कुछ आइटम करता है जब उनकी वस्तुएं संपत्ति परिवर्तन को सूचित करती हैं:

private void ItemChanged(object sender, PropertyChangedEventArgs e) 
    { 
     int senderIndex = IndexOf(sender); 
     SomeActionOnItemIndex(senderIndex); 
    } 

यदि मैं इंटरफ़ेस प्रॉक्सी जोड़ता हूं तो यह कोड विफल हो जाएगा, क्योंकि प्रेषक इंटरफ़ेस प्रॉक्सी में फ़ील्ड होगा और इंडेक्सऑफ (प्रेषक) -1 लौटाएगा।

उत्तर

5

हाँ, आप कर सकते हैं:

_windsor.Register(Component.For<ProductServices, IProductServices>() 
    .Interceptors(typeof(SomeInterceptorType)); 
+1

बहुत अच्छी तरह से धन्यवाद काम किया,। –

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

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