Я использую стандартную загрузочную загрузку NinjectMVC3, установленную в папке App_Start.Инъекция зависимостей с Ninject и глобальным фильтром: IAuthorizationFilter
Мой класс приложения выглядит следующим образом:
public class MvcApplication : HttpApplication
{
static void RegisterRoutes(RouteCollection routes)
{
// ... routes here ...
}
public void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
// empty
}
}
Я только следующие правила торгов Registed в NinjectMVC3:
Bind<IAccountsRepository>().To<AccountsRepository>();
this.BindFilter<GlobalAuthFilter>(FilterScope.Global, 0);
И мой глобальный фильтр:
public class GlobalAuthFilter : IAuthorizationFilter
{
readonly IAccountsRepository _accountsRepository;
public GlobalAuthFilter(IAccountsRepository accountsRepository)
{
_accountsRepository = accountsRepository;
}
public void OnAuthorization(AuthorizationContext context)
{
// Code here never reached. Why? What's wrong?
}
}
Есть любые контроллеры в моей заявке. И я хочу вызвать OnAuthorization для каждого вызова действий для каждого контроллера.
Но мой код не работает. Благодарю.
Да, я пла ced правил привязки в RegisterServices. Но это не сработает. –
@JeanLouis, я только что протестировал этот код, и он работал отлично. Шаги: 1. Создайте новое приложение ASP.NET MVC 3. 2. Установите пакет Ninject.MVC3 NuGet. 3. Определите типы 'IAccountsRepository',' AccountsRepository' и 'GlobalAuthFilter'. 4. Поместите код, который я указал в своем ответе в методе RegisterServices. 5. Запустите приложение. 6. Выполняется OnAuthorization. –
Я обновил свой ответ, чтобы проиллюстрировать пример с модулями Ninject. –