У меня есть это приложение DDD с MVC на презентации с Ninject.ASP.NET MVC 5 Фильтр и Ninject
У меня есть CrossCutting Layer, связывающий инъекции со всех слоев, и он работает как шарм.
Что я не могу сделать, это когда дело доходит до атрибутов фильтра. У меня есть этот фильтр, который проверяет один файл cookie и в зависимости от его значения выполняет запросы в базе данных. С помощью этой архитектуры я просто не могу сделать свой фильтр доступ к моему репозиторию напрямую, это будет неуважительно к методологии, которую я применяю.
У меня есть интерфейс IFooAppService и есть его методы, которые в конечном итоге попадут в репозиторий для запроса данных. Я могу успешно внедрить его в любой конструктор Controller, и он выполнит мой _fooAppService.Query(), но у меня этот XooFilter выше некоторых действий в моем приложении, и я просто не могу передать свой _fooAppService. Вот мой XooFilter:
public class XooFilter : ActionFilterAttribute
{
private readonly IFooAppService _fooAppService;
public XooFilter(IFooAppService fooAppService)
{
_fooAppService = fooAppService;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// LOGIC...
var fooValue = _fooAppService.Query();
// MORE LOGIC..
}
}
Но, когда я вставляю фильтр выше любого Действие [XooFilter], он не будет работать. Он говорит, что фильтр не имеет конструктора с 0 элементами.
Я просто не могу понять, как это сделать, и сохранить характеристики от DDD и IoC. Я нашел статью ниже, но не мог найти ответ:
Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?
[Не вводить зависимость в ваши атрибуты] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=98). Период! Сделайте свои [атрибуты пассивными] (http://blog.ploeh.dk/2014/06/13/passive-attributes/) или сделайте свой атрибут [скромным объектом] (http://xunitpatterns.com/Humble%20Object .html), как описано [здесь] (https://stackoverflow.com/questions/29915192/unity-property-injection-on-authorizeattribute/29916075#29916075). – Steven
Что мне делать? Мне нужно обращаться к базе данных каждый раз, когда вызывается эти фильтры. EDIT: Я довольно новичок в IoC и DI приятелях, но у меня есть основы. –
После того, как вы прочтете ссылки и ответьте на них, у вас будет достаточно информации, чтобы принять обоснованное решение о том, как решить вашу проблему. – Steven