Enfim, como utilizaremos o padrão de injeção de dependência pelo construtor, irei mostrar como implementar as classes de maneira à se comportarem como queremos, primeiramente, a minha camada Web vai fazer uma requisição à camada de negócios, já deixo subentendido que a minha View recebe um IEnumerable de Client :
Reparem no construtor do ClientController, ele espera um tipo IClientService que é instanciado através do Simple Injector, o mesmo acontece com a implementação da interface IClientService, veja:
A única diferença é que o construtor da classe ClientService espera um tipo IClientRepository, que é a camada de persistência de dados, e novamente o Simple Injector que faz a instância.
E por fim, temos que implementar a classe que faz a resolução das dependências, pra isso precisamos instalar o Simple Injector no projeto inicial, ou seja, no Web, e no projeto que vai comportar as resoluções; podemos fazer isso através do NuGet:
E pra tudo funcionar perfeitamente, basta adicionar uma linha de código no Global.asax do seu projeto Web:
Também gostaria de deixar registrado o quanto gostei da documentação do Simple Injector, bastante rica, com muita informação e dicas legais. Uma dessas dicas é de como registrar as dependências automaticamente, sem precisar mexer na classe do Container toda vez que adicionar uma nova classe que precise ser resolvida, o que facilita e agiliza muito o desenvolvimento, o exemplo disso está disponível no projeto no GitHub: https://github.com/vmussak/SimpleInjectorExample
Parabéns pelo Post, muito bem detalhado! E realmente, a documentação do Simple Injector foi muito bem feita. Abraço!
Muito interessante este artigo, era o que eu estava procurando, como implementar o simple injector de maneira simples e prática
Vinicius, estou implementando um projeto Web API com Simple Injector, entretanto tá meio complicado aqui,ele coloca as depedencias para as minhas classes mas da problema com as controllers do webapi, já procurei bastante na internet e não consegui achar nada que ajudasse. Será que vc poderia me ajudar? O erro é o seguinte: An error occurred when trying to create a controller of type ‘UserController’. Make sure that the controller has a parameterless public constructor
Sergio Prates, estou fazendo uma WebApi e meu problema é parecido, porém, no meu caso, o Dispose é chamado no meio de um contexto, como você resolveu isso ? tem um exemplo do codigo.
Roberto, já achou o problema? Se ainda estiver com dúvidas entre em contato comigo pelo email vinicius.mussak@outlook.com 😀
Tenho uma solução com vários projetos. Vou chamar aqui para exemplificar de projeto PDV e retaguarda.
Se eu colocar uma interface em um construtor da classe “Login” por exemplo e esquecer de por nas configurações do simple injector ou esta classe tiver 2 construtores quando eu for executar este projeto ele vai reclamar. Até ai tudo certo.
Mas se eu tiver 2 contêineres diferentes um para cada projeto ele vai reclamar para um mas não vai reclamar falando que esta faltando também no outro. Vai dar erro só quando eu executar o segundo projeto. Pensando que minha solução pode ter muitos projetos é um grande problema.
Se eu entendi corretamente, você compartilha classes de projetos em outros, certo? E cada projeto possui o seu próprio container para resolver as dependências. Se for isso, para resolver o seu problema você deve resolver a dependência de todas as classes utilizadas no projeto, mesmo que forem de outro projeto.
No projeto 1, você deve declarar a dependência (você já deve estar fazendo isso, é o projeto que “não reclama”)
Caso eu não tenha entendido ou algo não tenha ficado claro, pode me mandar um email (vinicius.mussak@outlook.com) que a gente resolve 🙂
Estou com dificuldade para usar o simpleInjector, quase desistindo, parece que há um problema com enumerable!!!! Já tentei de tudo