15

का उपयोग कर कस्टम एट्रिब्यूट में निर्भरता इंजेक्शन इंजेक्शन में मेरे एएसपी.नेट एमवीसी एप्लिकेशन में मैंने उपयोगकर्ताओं को अधिकृत करने के लिए एक कस्टम एक्शनफ़िल्टर लागू किया है।कैसल विंडसर

मैं CastleWindsor का उपयोग नियंत्रकों के सभी में निर्भरता इंजेक्शन उपलब्ध कराने के लिए इस प्रकार है:

protected virtual IWindsorContainer InitializeServiceLocator() 
    { 
     IWindsorContainer container = new WindsorContainer(); 
     ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); 

     container.RegisterControllers(typeof(HomeController).Assembly); 
     ComponentRegistrar.AddComponentsTo(container); 

     ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); 

     return container; 
    } 

मेरी CustomAttribute के भीतर, मैं एक निर्भरता है कि मेरे नियंत्रकों के सभी द्वारा किया जाता है की जरूरत है, फिर भी मैं उपयोगकर्ता निर्माता करने में असमर्थ हूँ एक विशेषता में आधारित इंजेक्शन।

तो यहां सबसे साफ तरीका क्या है? मैं निर्भरता कैसे प्रदान कर सकता हूं?

+7

गुणों में व्यवहार न करें ... –

+0

संभावित डुप्लिकेट [मैं विंडफॉर का उपयोग एक्शनफिल्टर एट्रिब्यूट्स में निर्भरताओं को इंजेक्ट करने के लिए कैसे करूं] (http://stackoverflow.com/questions/553330/how-do-i-use- विंडसर-टू-इंजेक्शन-निर्भरता-इन-एक्शनफिल्टरटेरियल्स) – BonyT

+0

आईएमएचओ का सबसे अच्छा जवाब यहां है http://stackoverflow.com/questions/10708565/asp-net-mvc-ifilterprovider-and-separation-of-concerns (और उस प्रश्न में खुद - बहुत अच्छा उदाहरण (संकेत: 'IFilterProvider'))। –

उत्तर

12

ठीक है - यह Database injection into a validation attribute with ASP MVC and Castle Windsor का डुप्लिकेट प्रतीत होता है जिसका उत्तर दिया गया है।

भी How do I use Windsor to inject dependencies into ActionFilterAttributes

उपर्युक्त के माध्यम से पढ़ने के बाद, और संदर्भित लेख - मेरे लिए महत्वपूर्ण एक है जो किसी और के लिए http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx है।

1

आप नहीं कर सकते। गुण मेटाडेटा हैं। उनमें व्यवहार करना गलत है। निर्भरता रखना भी बदतर है।

ऑब्जेक्ट्स को इंगित करने के लिए मार्कर के रूप में अपनी विशेषता का उपयोग करें जिसमें आप व्यवहार को लागू करना चाहते हैं और कहीं और व्यवहार को लागू करना चाहते हैं।

एमवीसी अन्यत्र आमतौर पर एक कस्टम एक्शन इनवॉकर का मतलब है जो आपको आवश्यक व्यवहार प्रदान करने के लिए विशेषता से डेटा का उपयोग करता है।

+2

ठीक है - कृपया मेरे द्वारा किए जा रहे कार्यों और इस आलेख के बीच अंतर को समझाएं: http://www.asp.net/mvc/tutorials/understanding-action-filters-vb – BonyT

+18

इसके अलावा - यह उत्तर वास्तव में किसी भी प्रकार के बिना आलोचना प्रदान करता है समाधान का ... "कहीं और?" कृपया विशिष्ट रहें। आप प्रमाणीकरण को कैसे कार्यान्वित करेंगे जो कई नियंत्रकों पर पूरे एप्लिकेशन पर लागू होता है और निर्भरता की आवश्यकता होती है? – BonyT

+0

मुझे एक बड़े वसा अपवोट के साथ डाउनवोट को खत्म करना पड़ा। एक तस्वीर हजारों शब्दों से अधिक कहती है। – Steven