SimpleInjector – Register Conditional

Problema

Olá tudo bem?

Venho utilizando SimpleInjector como framework de IOC nos meus últimos projetos e realmente é bem simples e fácil de utilizar. Porém hoje passei pela dificuldade de configurar meu container para utilizar uma implementação especifica dado um implementador, isto é, quando utilizar uma determinada classe caso exista várias implementações para uma interface.

Resolução

Após algumas pesquisas encontrei o RegisterConditional. RegisterConditional é uma implementação que permite você utilizar uma expressão lambda para informar qual classe utilizar dado um implementador.

O exemplo deixa tudo mais fácil:

public class SimpleInjectorResolver
    {

        public SimpleInjectorResolver(Container container)
        {

            container
                .RegisterConditional<IUnidadeDeTrabalho, UnidadeDeTrabalhoHorasTrabalhadas>
                (
                    Lifestyle.Singleton,
                    _ => _.Consumer.ServiceType == typeof(HorasTrabalhadas.Core.Application.Layer.CasosDeUso.MarcacaoDePonto)
                );

            container
                .RegisterConditional<IUnidadeDeTrabalho, UnidadeDeTrabalhoDeGerenciamentoDePonto>
                (
                    Lifestyle.Singleton, _ => _.Consumer.ServiceType == typeof(JustificacaoDeFalta)
                );

        }
    }

Como segue no trecho de código acima, dado um um tipo de Consumer , eu utilizo uma implementação da interface IUnidadeDeTrabalho.

Bem tranquilo, não ? post rápido que espero que ajude 🙂

Referências

Documentação

Stack Overflow

 

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s