के बाद चयनकर्ता के साथ इंटरसेप्टर लागू करता है मेरे पास एक सार आधार वर्ग है जिसमें कई विधियां हैं, जिनमें से मुझे हर समय अवरोध करने की आवश्यकता है। बेस क्लास को उपयोगकर्ता परिभाषित कक्षाओं द्वारा विरासत में प्राप्त किया जा सकता है और एप्लिकेशन स्टार्टअप पर कंटेनर के साथ पंजीकृत किया जा सकता है। यदि उपयोगकर्ता ने एक पंजीकृत नहीं किया है, तो कंटेनर इंस्टॉलर एक ही पंजीकृत होगा।कैसल विंडसर पहले से पंजीकृत
यहां समस्या है - उपयोगकर्ता को इंटरसेप्टर जोड़ने के बारे में चिंता करने की आवश्यकता नहीं है। कंटेनर को इसे स्वयं जोड़ना चाहिए, इस पर ध्यान दिए बिना कि कौन और कहाँ घटक पंजीकृत है।
यह अब मैं क्या कर रहा है:
if(!container.Kernel.HasComponent(typeof(MyBaseComponent)))
container.Register(Component.For<MyComponent>()
.Interceptors(InterceptorReference
.ForType<MyComponentMethodInterceptor>())
.SelectedWith(new MyComponentMethodSelector()).AtIndex(1));
MyComponentMethodSelector
एक सरल IInterceptorSelector जो जांच करता है कि methodName एक मैं रोकना (इस स्थिति में एक MyComponentMethodInterceptor
इसे करने के लिए जोड़ा जाता है) की जरूरत के बराबर होती है है।
जैसा कि आप देख सकते हैं कि यह जांच करेगा कि घटक पहले से ही पंजीकृत है या नहीं।
सवाल है - मैं अगर यह पहले से पंजीकृत है एक इंटरसेप्टर जोड़ने का एक तरीका है? दिमाग में आने वाली सबसे स्पष्ट पसंद IContributeComponentModelConstruction
का उपयोग कर रही है, हालांकि उस बिंदु पर मैं इंटरसेप्टर को जो विधि जोड़ता हूं उसे चुनने में सक्षम नहीं हूं। या वहाँ है?
संपादित करें:
मैं एक छोटे से अधिक विशिष्ट किया जाना चाहिए था। मुझे केवल एक विशिष्ट विधि के लिए एक इंटरसेप्टर जोड़ने की जरूरत है। इसलिए मैं एक MyComponentMethodSelector का उपयोग क्यों कर रहा हूं। मैं IContributeComponentModel से अवगत हूं, और मैंने तब तक शुरुआत की जब तक मुझे एहसास हुआ कि विधि चयनकर्ता जोड़ने के लिए मेरे पास कोई रास्ता नहीं था।
NeroS: आप एक सुविधा
तो सुविधा कंटेनर करने के लिए से पहले पंजीकरण अपने घटक के जोड़ सकते हैं या जब अपने घटक दर्ज की अपनी सुविधा घटना को याद करेंगे बनाने के द्वारा शुरू होगा क्या आपको यह पता लगाने का कोई मौका मिला कि आप जो चाहते थे उसे संभालने के लिए, मुझे इसके बारे में सुनने में दिलचस्पी होगी – samy
मुझे दुर्भाग्य से नहीं मिला है। मुझे एक अलग परियोजना में फिर से सौंप दिया गया है, इसलिए यह वर्तमान में होल्ड पर है। हालांकि मैं इसे एक बिंदु पर वापस प्राप्त करूंगा। – NeroS