Injetor simples: classes de fábrica que precisam criar classes com dependências

Eu tenho uma classe de fábrica que cria um par de diferentes tipos de classe. A fábrica está registrada no contêiner. Qual é a maneira recomendada de criar as classes dentro da fábrica, uma vez que elas também possuem dependências. Eu claramente quero evitar uma dependência no container, mas se eu for novo nessas classes, eles não estarão usando o container. por exemplo.

public class MyFactory
{
    public IMyWorker CreateInstance(WorkerType workerType)
    {
        if (workerType == WorkerType.A)
              return new WorkerA(dependency1, dependency2);

        return new WorkerB(dependency1);

    }
}

Então a questão é de onde eu obtenho essas dependências.

Uma opção poderia ser torná-los dependências da fábrica. por exemplo.

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);

    }
}

Outra poderia ser registrar os tipos de trabalhadores e fazer essas dependências da fábrica, e.

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;

    }
}

Com a primeira opção, sinto que estou sugando as dependências dos trabalhadores para a fábrica. Com a segunda opção, os trabalhadores são criados quando a fábrica é criada.

Pensamentos?

questionAnswers(4)

yourAnswerToTheQuestion