कैसे NInject can do it और AutoFac can do it मैं यह पता लगाने की कैसे महल विंडसरमैं विंडसर का उपयोग कैसे करूँ ActionFilterAttributes
का उपयोग कर इस समय मैं एक बदसूरत स्थिर उपयोग कर रहा हूँ MVC ActionFilters में निर्भरता इंजेक्षन कोशिश कर रहा हूँ देखने के बाद में निर्भरता सुई आईओसी सहायक वर्ग इस तरह निर्माता कोड से निर्भरता को हल करने:
public class MyFilterAttribute : ActionFilterAttribute
{
private readonly IUserRepository _userRepository;
public MyFilterAttribute() : this(IoC.Resolve<IUserRepository>()) { }
public MyFilterAttribute(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
मैं अपने फिल्टर से है कि स्थिर antipattern आईओसी बात को दूर करने में खुशी होगी।
कैसल विंडसर के साथ ऐसा करने के बारे में मुझे कोई संकेत मिलेगा?
और नहीं, डी फ्रेमवर्क बदलना एक विकल्प नहीं है।
public class MyFilterAttribute : ActionFilterAttribute {
public MyFilterAttribute(Type serviceType) {
this.serviceType = serviceType;
}
public override void OnActionExecuting(FilterExecutingContext c) {
Container.Resolve<IFilterService>(serviceType).OnActionExecuting(c);
// alternatively swap c with some context defined by you
}
// (...) action executed implemented analogously
public Type ServiceType { get { return serviceType; } }
public IWindsorContainer Container { set; get; }
}
फिर आदेश का नियंत्रण लेने के लिए, दो लेख आप की बात कर रहे रूप में एक ही दृष्टिकोण का उपयोग: - यानी कुछ इस तरह MyFilterAttribute ctor साथ तर्क के रूप में एक प्रकार ले जा रहा:
मैं सहमत हूं: विशेषताओं को "निष्पादन योग्य" नहीं होना चाहिए बल्कि सिर्फ एक टैग होना चाहिए। –
आपके उत्तर के लिए बहुत बहुत धन्यवाद! मैं कुछ mods के साथ चल रहा है: 1) कंटेनर। रेखा रेखा को एक सामान्य पैरामीटर की आवश्यकता है। मैंने इसे कंटेनर का उपयोग करने के लिए बदल दिया। रिसोल्व (सर्विस टाइप) और इसे कास्ट करें। 2) मैंने mvccontrib WindsorControllerFactory विरासत में मिला और CreateController() में ActionInvoker जोड़ा। –