Сервисный локатор проще в использовании, чем внедрение зависимостей?

Приложение, над которым я работаю, полагается на Autofac как на контейнер DI, и это одна из причин, по которым я решил для его использования, среди прочего, была функция фабрики делегатов (см. здесь )

Это отлично работает для всех случаев, когда мне нужно воссоздать одни и те же элементы несколько раз, как в случае некоторых отчетов и связанных экраны.Некоторые отчеты (даже однотипные) выполняются одновременно, но они изменяются только своими параметрами, определяемыми пользователем, поэтому имеет смысл (я думаю) внедрять фабрики для создания экземпляров, передавая бесплатные параметры и оставляя остальное на усмотрение заявление.

Проблема заключается в том, что каждый отчет состоит из переменного количества подотчетов (задач), и каждая задача реализует интерфейс ITask. В каждом отчете может быть до 50 различных задач, и каждая задача инкапсулирует конкретную бизнес-операцию. Один из вариантов, который у меня есть, - это внедрить фабрики делегатов и создавать их при необходимости.

Эти задачи должны динамически генерироваться фабриками и что-то вроде:

var myTaskA = _taskFactoryConcreteTaskA();
var myTaskB = _taskFactoryConcreteTaskB();
var myTaskC = _taskFactoryConcreteTaskC();
...
var myTaskZZ = = _taskFactoryConcreteTaskZZ();

требует много ручного подключения (делегаты, конструктор, резервные поля и т. Д.), В то время как что-то вроде

var myTaskA = _taskFactory.Create();
var myTaskB = _taskFactory.Create();
var myTaskC = _taskFactory.Create();
...
var myTaskZZ = _taskFactory.Create();

было бы невероятно меньше работы, особенно если _taskFactory обертывает контейнер, как показано в этом другом сообщении , но это также в основном означает, что я использую локатор служб для создания своих задач.

Какие еще у меня есть варианты, которые могут подойти для решения этой проблемы?

(ПРИМЕЧАНИЕ: есть большая вероятность, что я полностью сбился с пути, и мне нужно больше узнать о DI, и в этом случае любой вклад было бы еще важнее)

6
задан Community 23 May 2017 в 12:00
поделиться