मेरे पास एक कस्टम प्राधिकरण वर्ग है जो फ़िल्टरएट्रिब्यूट से प्राप्त होता है और IAuthorizationFilter लागू करता है। मैं Ninject w/asp.net एमवीसी 3 समर्थन के नवीनतम संस्करण का उपयोग कर रहा हूँ।कस्टम प्रमाणीकरण एमवीसी 3 और निनजेक्ट आईओसी
मेरी समस्या यह है कि मैं एक भंडार इंजेक्शन के लिए कन्स्ट्रक्टर इंजेक्शन का उपयोग कर रहा हूं। लेकिन उस समय तक प्राधिकरण को बुलाया जाता है, भंडार शून्य है। यहाँ कोड है ...
public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
private readonly IMyRepo _MyRepo;
public MyAuthorizeAttribute() { }
public MyAuthorizeAttribute(IMyRepo myRepo)
{
_MyRepo= myRepo; //this gets initialized
}
public void OnAuthorization(AuthorizationContext filterContext)
{
_MyRepo.DoStuff(); //<< Null, wtf
}
}
फ़िल्टर बाइंडिंग:
Bind<IMyRepo>().To<MyRepo>().InRequestScope();
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Controller, null).WhenControllerHas<MyAuthorizeAttribute >();
अद्यतन: एक बात मैंने देखा है इस फिल्टर नियंत्रक स्तर पर है। मेरे पास एक्शन स्कोप पर अन्य फ़िल्टर हैं जो ठीक से काम करने लगते हैं ... क्या यह कारण हो सकता है?
अद्यतन 2: मैंने पुष्टि की है कि अगर मैं कार्रवाई करने के लिए फिल्टर दायरा बदलना है, तो भंडार उपलब्ध OnAuthorization (शून्य नहीं) है।
यह नीचे काम करता है, हालांकि मुझे नियंत्रक दायरे की आवश्यकता है, कार्रवाई नहीं।
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Action, null).WhenActionMethodHas<MyAuthorizeAttribute >();
ऐसा लगता है कि आपके MyAuthorizeAttribute को डिफ़ॉल्ट कन्स्ट्रक्टर के साथ बुलाया जाता है। – dexter
@ डेक्सटर, ऐसा नहीं लगता कि यह मामला है। मैंने रेपो के साथ ब्रेकपॉइंट और सीटीआर रखा है जिसे –
कहा जाता है क्या आपने निनजेक्ट मॉड्यूल में फ़िल्टर बाध्यकारी सेट अप किया है। Http://www.planetgeek.ch/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/#more-2004 में "फ़िल्टर के लिए निर्भरता इंजेक्शन" अनुभाग के तहत नमूना कोड देखें – WorldIsRound