我正在尝试将依赖项注入到自定义的AuthorizeAttribute
中,如下所示:
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;
}
}
这个方法可以正常工作,但似乎被解析为单例模式,这意味着我会遇到我之前问题中描述的问题。
我想做的是使用属性注入,但由于我的Attribute本身没有被Unity解析,所以我无法找到一种配置容器来拦截和解析属性的方法。我尝试了以下方法:
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"));
但是在运行时,该属性始终为空。
是否有人已经实现了这一点,如果是的话,你有一个例子吗?
IFilterProvider
从DI容器中按需解析过滤器来避免固定依赖,而不是在静态的GlobalFilterCollection
中注册过滤器。 - NightOwl888