Simple Injector: klasy Factory, które muszą tworzyć klasy z zależnościami
Mam klasę fabryczną, która tworzy kilka różnych typów klas. Fabryka jest zarejestrowana w kontenerze. Jaki jest zalecany sposób tworzenia klas w fabryce, biorąc pod uwagę, że mają one również zależności. Wyraźnie chcę uniknąć zależności od kontenera, ale jeśli dodam te klasy, nie będą używać kontenera. na przykład
public class MyFactory
{
public IMyWorker CreateInstance(WorkerType workerType)
{
if (workerType == WorkerType.A)
return new WorkerA(dependency1, dependency2);
return new WorkerB(dependency1);
}
}
Pytanie brzmi: skąd wziąć te zależności.
Jedną z opcji może być uzależnienie ich od fabryki. na przykład
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);
}
}
Innym może być rejestracja typów pracowników i uzależnienie fabryki, np.
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;
}
}
W pierwszej opcji czuję się, jakbym wciągał zależności pracowników do fabryki. W drugiej opcji pracownicy są tworzeni podczas tworzenia fabryki.
Myśli?