Apresentação sobre Inversão de Controlo (IoC) / Injecção de Dependência (DI) por Bruno Lopes e C. Augusto Proiete (MVP), no evento de aniversário da comunidade NetPonto
Video desta apresentação:
http://www.youtube.com/watch?v=g4mYmjvPa2U
Inversão de Controlo (IoC) / Injecção de Dependência (DI) - Bruno Lopes & C. Augusto Proiete
1. http://netponto.org 14ª Reunião Presencial - 18/09/2010 Inversão de Controlo (IoC) / Injecção de Dependência (DI)Bruno Lopes e Caio Proiete
2. Bruno Lopes 5 anos de experiência profissional em IT Co-Fundador da weListen, Business Solutions Ex-Sysadmin Pythonista nos tempos livres
3. Caio Proiete Bruno Lopes 10 anos de experiência profissional em TI Consultor da Novabase Formador da Ciclo Microsoft MVP, MCT 5 anos de experiência profissional em IT Co-Fundador da weListen, Business Solutions Ex-Sysadmin Pythonista nos tempos livres
4. Agenda Inversão de Controlo (IoC) - Princípio DependencyInjection (DI) - Padrão Demo Unity e Autofac como containerspara DI Demo Outros containers para DI
7. // Magic. Do not touch. http://stackoverflow.com/questions/184618
8. // Magic. Do not touch. // When I wrote this, only God and I understood what I was doing http://stackoverflow.com/questions/184618
9. // Magic. Do not touch. // When I wrote this, only God and I understood what I was doing // Now, God only knows http://stackoverflow.com/questions/184618
10. // Magic. Do not touch. // When I wrote this, only God and I understood what I was doing // Now, God only knows // somedev1 - 06/07/02 Adding temporary tracking of Login screen// somedev2 - 05/22/07 Temporary my ass http://stackoverflow.com/questions/184618
11. Inversão de Controlo (IoC) Numa hierarquia, os módulos de nível mais alto não devem depender directamente dos módulos de nível mais baixo. Ambos devem depender de abstracções.
12. Inversão de Controlo (IoC) Numa hierarquia, os módulos de nível mais alto não devem depender directamente dos módulos de nível mais baixo. Ambos devem depender de abstracções. As abstracções não devem depender de detalhes de implementação, mas os detalhes devem depender das abstracções.
13. Exemplo (simples) da Violação do Princípio public class SessoesNetPontoService { public IEnumerable<Sessao>ObterSessoesDo(string nomeOrador) { var service = newNetPontoDataService(); returnservice.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } } Inversão de Controlo (IoC)
14. Exemplo (simples) da Violação do Princípio public class SessoesNetPontoService { public IEnumerable<Sessao>ObterSessoesDo(string nomeOrador) { var service = newNetPontoDataService(); returnservice.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } } Inversão de Controlo (IoC)
15. Exemplo (simples) da Violação do Princípio Precisamosabstrairestadependência. Dependency Injection FTW :) public class SessoesNetPontoService { public IEnumerable<Sessao>ObterSessoesDo(string nomeOrador) { var service = newNetPontoDataService(); returnservice.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } } Inversão de Controlo (IoC)
16. Injecção de Dependências (DI) Técnica / Padrão de Implementação Diferentes Formas de Implementar ConstructorInjection* SetterInjection Interface Injection * mais comum
18. IoC Containers Bibliotecas de suporte a DI Implementam Registo de implementações de serviços Resolução de dependências Gestão de ciclo de vida Ocasionalmente AOP/Interception Demonstração de duas alternativas: Unity Autofac
19. Unity: DI Container “Application Block” da Microsoft http://unity.codeplex.com Actualmente na versão 2.0. Variantes para .NET 3.5 e 4.0 Silverlight 3 e 4 Parte integrante da Enterprise Library http://entlib.codeplex.com
20. Autofac: DI Container Open-Source http://code.google.com/p/autofac/ Actualmente na versão 2.2.4 Versão 2.3.1 em Preview Variantes para .NET 3.5 e 4.0 Silverlight 3 e 4
22. Outros containers para DI Castle Windsor http://www.castleproject.org/container/index.html Ninject http://ninject.org Spring.NET http://www.springframework.net StructureMap http://structuremap.sourceforge.net Lista com maisalgumasopções http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
23. Resumo Dependency Injection Classes independentesumas das outrasatravés de abstrações. Menorimpactoparaintrodução de mudanças e códigomaisfácil de testar. Diferentesformas de implementar (Constructor, Setter, Interface, entre outras... Normalmenteutiliza-se algumtipo de Containerpara as dependências. Váriasopçõesdisponíveis.
26. Próximas reuniões presenciais 18/09/2010 - Setembro 23/10/2010 - Outubro 20/11/2010 - Novembro 11/12/2010 - DezembroReserva estes dias na agenda! :)