Я пытаюсь внедрить зависимость в пользовательский 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;
}
}
Это работает, но, похоже, решается как единое целое, означающее, что я получил проблемы, описанные в моем предыдущем вопрос
Я хотел бы использовать инъекцию свойств, но поскольку сам мой атрибут не разрешен 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"));
Но свойство всегда нулевое во время выполнения.
Кто-нибудь достиг этого, и если да, то есть ли у вас пример?