У меня есть класс factory, который создает несколько разных типов классов. factory зарегистрирован в контейнере. Каков рекомендуемый способ создания классов внутри factory, учитывая, что они также имеют зависимости. Я явно хочу избежать зависимости от контейнера, но если я новичок в этих классах, то они не будут использовать контейнер. например.
public class MyFactory
{
public IMyWorker CreateInstance(WorkerType workerType)
{
if (workerType == WorkerType.A)
return new WorkerA(dependency1, dependency2);
return new WorkerB(dependency1);
}
}
Итак, вопрос в том, где я могу получить эти зависимости.
Один из вариантов может заключаться в том, чтобы сделать их зависимыми от factory. например.
public class MyFactory
{
private Dependency1 dependency1;
private Dependency2 dependency2;
public MyFactory(Dependency1 dependency1, Dependency2, dependency2)
{
this.dependency1 = dependency1; this.dependency2 = dependency2;
}
public IMyWorker CreateInstance(WorkerType workerType)
{
if (workerType == WorkerType.A)
return new WorkerA(dependency1, dependency2);
return new WorkerB(dependency1);
}
}
Другим может быть регистрация типов рабочих и создание этих зависимостей factory например.
public class MyFactory
{
private IWorkerA workerA;
private IWorkerB workerB;
public MyFactory(IWorkerA workerA, IWorkerB, workerB)
{
this.workerA = workerA; this.workerB = workerB;
}
public IMyWorker CreateInstance(WorkerType workerType)
{
if (workerType == WorkerType.A)
return workerA;
return workerB;
}
}
С первым вариантом я чувствую, что я забираю зависимости рабочих в factory. При втором варианте рабочие создаются при создании factory.
Мысли?