【发布时间】:2015-07-07 01:18:07
【问题描述】:
我正在尝试将依赖项注入自定义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;
}
}
这可行,但似乎正在作为单例解决,这意味着我遇到了pervious question 中描述的问题
我想做的是使用属性注入,但由于我的属性本身没有被 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"));
但该属性在运行时始终为空。
有没有人做到这一点,如果有,你有例子吗?
【问题讨论】:
标签: c# asp.net-mvc authentication dependency-injection unity-container