ExtensibleActionInvoker утверждает, что может выполнять внедрение свойств в фильтры действий.
Исправлять - но не путать фильтры действий с атрибутами, которые могут их не реализовывать.Самый простой способ достичь этого в ASP.NET MVC - это разделить обязанности, даже если инфраструктура MVC позволяет объединять их.
Например, используйте пару классов - класс атрибутов, который содержит только данные:
// Just a regular old attribute with data values
class SomeAttribute : Attribute { ... }
И фильтр с внедренными зависимостями:
// Gets dependencies injected
class SomeFilter : IActionFilter { ... }
SomeFilter
просто использует типичный подход для получения атрибута SomeAttribute
из контроллера или метода действия через GetCustomAttributes()
чтобы выполнить любую необходимую работу.
Затем вы можете использовать ExtensibleActionInvoker
для подключения фильтра:
builder.RegisterControllers(...).InjectActionInvoker();
builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>();
builder.RegisterType<SomeFilter>().As<IActionFilter>();
Это может быть немного больше кода, чем вы пишете с использованием атрибута-подход фильтра, но качество кода будет лучше в долгосрочной перспективе (например, избегая ограничений атрибутов и неловкости решений Service Locator.)