Pergunta

postou esta no grupo StructureMap também. Nós só comecei a usar StructureMap na semana passada, e realmente estão cavando-lo.


Eu tenho certeza que estou perdendo algo simples.

Eu estou tentando imitar o seguinte código, usando SM dentro do meu fábrica. Eu estou ok com ter a dependência recipiente na classe de fábrica. o consenso neste segmento parecia ser que este era o direito abordagem: http://www.codeplex.com/unity/Thread/ View.aspx? ThreadId = 29697 . Se há uma maneira melhor, estou aberto para ouvir outras formas de realizar isto.

Basicamente minha fábrica é Criar método levará em um valor de enumeração (-lo pode ser um tipo real, mas de qualquer forma não é algo controlado pelo contêiner), e deve retornar a instância certa. Observe que os tipos de retorno será gerido pela SM. Eu não quero colocar toda a depenencies no ctor da fábrica, já que pode haver muitos (!).

public class PreSaveActionFactory : IPreSaveActionFactory 
{ 
    public IPreSaveAction Create(MyEnumType enumType) 
    { 
        IPreSaveAction action; 

        switch (enumType) 
        { 
            case MyEnumType.Value1: 
                //imagine this has 3 Ctor arguments 
                action = new Value1PreSaveAction(); 
                break; 
            case MyEnumType.Value2: 
                //and imagine this has 4 completely different Ctor arguments 
                action = new Value2PreSaveAction(); 
                break; 
            default: 
                throw new NotSupportedException(); 
        } 

        return action; 
    } 
} 

I link para a seção direita dos docs é bom, você não precisa escrever o código para mim (embora eu não vou reclamar :)). Eu gostaria de saber o que a fábrica parece, e também o código de registro.

Foi útil?

Solução

Eu nunca tentou fazê-lo desta maneira, mas você pode usar o método .WithName () para fornecer um nome de instância, então, presumivelmente, obter a instância via ObjectFactory.GetNamedInstance ().

Outra abordagem (que eu tenho usado com sucesso) seria criar um dicionário de que age como um typemapping. Procura do tipo de lá e, em seguida, obter uma instância desse tipo através do ObjectFactory.

Outras dicas

Como para o registro, eu estou pensando que você vai querer usar Conditional objeto Construção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top