У меня есть пользовательский класс авторизации, который наследуется от FilterAttribute и реализует IAuthorizationFilter.Я использую последнюю версию Ninject с поддержкой MVC 3.
Проблема, с которой я столкнулся, заключается в том, что я использую конструктор для инъекции в хранилище.Но к тому времени, когда вызывается OnAuthorization, хранилище становится пустым.Вот код ...
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 >();