मैं इस प्रकार एक कस्टम AuthorizeAttribute में एक dependancy इंजेक्षन करने की कोशिश कर रहा हूँ:विशेषताओं पर संपत्ति इंजेक्शन
public class UserCanAccessArea : AuthorizeAttribute
{
readonly IPermissionService permissionService;
public UserCanAccessArea() :
this(DependencyResolver.Current.GetService<IPermissionService>()) { }
public UserCanAccessArea(IPermissionService permissionService)
{
this.permissionService = permissionService;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
string AreaID =
httpContext.Request.RequestContext.RouteData.Values["AreaID"] as string;
bool isAuthorized = false;
if (base.AuthorizeCore(httpContext))
isAuthorized = permissionService.UserCanAccessArea(AreaID, httpContext.User);
return isAuthorized;
}
}
यह काम करता है लेकिन जिसका अर्थ है मैं समस्याओं मेरी pervious question
में वर्णित प्राप्त एक सिंगलटन के रूप में हल करने जा रहा हैमैं जो करना चाहता हूं वह संपत्ति इंजेक्शन का उपयोग करना है, लेकिन चूंकि मेरी विशेषता स्वयं एकता द्वारा हल नहीं होती है, इसलिए मैं कंटेनर को किसी संपत्ति को अवरुद्ध करने और हल करने के लिए कॉन्फ़िगर करने का कोई तरीका नहीं ढूंढ पा रहा हूं।
public class UserCanAccessArea : AuthorizeAttribute
{
public IPermissionService permissionService { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
string AreaID =
httpContext.Request.RequestContext.RouteData.Values["AreaID"] as string;
bool isAuthorized = false;
if (base.AuthorizeCore(httpContext))
isAuthorized = permissionService.UserCanAccessArea(AreaID, httpContext.User);
return isAuthorized;
}
}
कंटेनर:: मैं निम्नलिखित की कोशिश की है
container.RegisterType<UserCanAccessArea>(new InjectionProperty("permissionService"));
लेकिन संपत्ति कार्यावधि में हमेशा रिक्त है।
क्या किसी ने इसे हासिल किया है और यदि ऐसा है तो आपके पास एक उदाहरण है?
मैं विकल्प 1 की खोज कर रहा हूं, और ऐसा लगता है कि यदि आप dbcontext को इनरक्वैस्टस्कोप (निनजेक्ट) को हल करने के लिए निर्दिष्ट किया गया है तो इसका उपयोग नहीं किया जा सकता है। अन्यथा पूरी तरह से काम करता है। मैंने पहली बार सेवा लोकेटर (विरोधी पैटर्न, लेकिन सेवा वस्तुओं के निर्माण को हल करने के साथ) की कोशिश की है। कस्टम अधिकृत विशेषता के साथ समस्या यह है कि इसे रनटाइम पर बनाया गया है और InRequestScope का पालन नहीं करता है। अगर मैं गलत हूं कृपया मुझे सही। –
मैं InRequestScope विकल्प का उपयोग करना चाहता हूं, क्योंकि अलग-अलग रिपॉजिटरीज़ के साथ काम करते समय एक और एक ही dbcontext होना चाहता है, और यूनिटऑफवर्क का उपयोग करने में सक्षम होना - dbcontext में savechanges को कॉल करने के लिए एक स्थान। –
एक विचार सेवा के लिए DI का उपयोग नहीं करना है, लेकिन केवल प्राधिकरण फ़िल्टर में उपयोग की जाने वाली वास्तविक वस्तु बनाएं। क्या यह एक अच्छा दृष्टिकोण है? यह मेरा कोड बदसूरत सेवा के रूप में करेगा जो मुझे अन्य निर्भर सेवाओं और भंडारों के लिए चाहिए .... –