Я хотел бы использовать фильтр действий глобальной области действия в моем приложении MVC 3 с использованием Ninject;Тем не менее, я пытаюсь понять время существования этого фильтра, его зависимости и как представить варианты его зависимостей, украшая мои контроллеры и / или методы действия.
Я бы хотел иметь свой тип фильтразависит от объектов, время жизни которых связано с областью запроса, поэтому что-то вроде этого:
public sealed class MyGlobalActionFilter : IActionFilter
{
public MyGlobalActionFilter(IService1 svc1, IService2 svc2, RequestType reqType)
{
// code here
}
// IActionFilter implementation here...
}
... и в конфигурации модуля ...
Bind<IService1>().To<ConcreteService1>().InRequestScope()
Bind<IService2>().To<ConcreteService2>().InRequestScope()
BindFilter<MyGlobalActionFilter>(FilterScope.Global, null)
.WhenControllerHas<RequestTypeAttribute>()
.WithConstructorArgumentFromControllerAttribute<RequestTypeAttribute>(
"reqType",
x => x.RequestType
);
BindFilter<MyGlobalActionFilter>(FilterScope.Global, null)
.WhenActionMethodHas<RequestTypeAttribute>()
.WithConstructorArgumentFromActionAttribute<RequestTypeAttribute>(
"reqType",
x => x.RequestType
);
BindFilter<MyGlobalActionFilter>(FilterScope.Global)
.When(x => true)
.WithConstructorArgument("reqType", RequestType.Undefined)
И атрибут наконтроллеры и / или методы действия для представления специфичного для приложения «типа запроса»:
[RequestType(RequestType.Type1)]
public sealed class SomeController : Controller { /* code here*/ }
Правильно ли я понимаю, как это должно работать?Будет ли новый экземпляр MyGlobalActionFilter вращаться и вводиться при каждом HTTP-запросе?Если это не сработает, что я упускаю, и что может быть лучше для этой работы?
Кроме того, с введением RequestType
синтаксис BindFilter
здесь представляется излишне многословным, яЯ не уверен, работает ли он так, как я ожидал, и, похоже, был бы лучший способ внедрить значение по умолчанию RequestType
в фильтр действий, если RequestTypeAttribute
отсутствует на контроллере или в методе действий.
Пожалуйста, просветите меня!