У меня есть собственный класс полномочий, который наследует от FilterAttribute и реализует IAuthorizationFilter. Я использую последнюю версию поддержки Ninject w/asp.net MVC 3.
У меня есть проблема: я использую инсталляцию конструктора для ввода репозитория. Но к тому времени, когда вызывается OnAuthorization, репозиторий имеет значение null. Вот код...
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 >();
Update: Я заметил, что этот фильтр находится на уровне контроллера. У меня есть другие фильтры в области действия, которые, похоже, работают правильно... Может быть, это и есть причина?
Обновление 2: Я подтвердил, что если я изменю область фильтра на действие, тогда репозиторий доступен OnAuthorization (не null).
Это работает ниже, однако мне нужно в области контроллера, а не в действии.
this.BindFilter<MyAuthorizeAttribute >(System.Web.Mvc.FilterScope.Action, null).WhenActionMethodHas<MyAuthorizeAttribute >();