Приложение, над которым я работаю, использует Autofac в качестве DI-контейнера, и одной из причин, по которой я решил использовать его, была, среди прочего, функция фабрики делегатов (см. здесь )
Это прекрасно работает для всех случаев, когда мне нужно воссоздать одни и те же элементы несколько раз, как в случае некоторых отчетов и связанных экранов. Некоторые отчеты (даже отчеты одного и того же типа) выполняются одновременно, но они изменяются только по своим пользовательским параметрам, поэтому имеет смысл (я думаю) вводить фабрики для создания экземпляров, передавая свободные параметры и оставляя остальные применение.
Проблема заключается в том, что каждый отчет состоит из переменного количества подотчетов (задач), и каждая задача реализует интерфейс ITask. Каждый отчет может содержать до 50 различных задач, и каждая задача заключает в себе конкретную бизнес-операцию. Один из вариантов, который у меня есть, - вводить фабрики делегатов и создавать их при необходимости.
Эти задачи должны динамически генерироваться фабриками и что-то вроде:
var myTaskA = _taskFactoryConcreteTaskA();
var myTaskB = _taskFactoryConcreteTaskB();
var myTaskC = _taskFactoryConcreteTaskC();
...
var myTaskZZ = = _taskFactoryConcreteTaskZZ();
требует много ручного подключения (делегаты, конструктор, вспомогательные поля и т. Д.), В то время как что-то вроде
var myTaskA = _taskFactory.Create<ConcreteTaskA>();
var myTaskB = _taskFactory.Create<ConcreteTaskB>();
var myTaskC = _taskFactory.Create<ConcreteTaskC>();
...
var myTaskZZ = _taskFactory.Create<ConcreteTaskZZ>();
будет невероятно менее трудоемким, особенно если _taskFactory оборачивает контейнер, как показано в этом другом посте , но это также в основном означает, что я использую сервисный локатор для создания своих задач.
Какие еще есть варианты, которые могут подойти для решения этой проблемы?
(ПРИМЕЧАНИЕ: есть большая вероятность, что я совершенно не в курсе, и мне нужно больше читать о DI, и в этом случае любой вклад будет еще более важным)