http://netponto.org<br />14ª Reunião Presencial - 18/09/2010<br />Inversão de Controlo (IoC) / Injecção de Dependência (DI...
Bruno Lopes<br />5 anos de experiência profissional em IT<br />Co-Fundador da weListen, Business Solutions<br />Ex-Sysadmi...
                                  Caio Proiete<br />Bruno Lopes<br />10 anos de experiência profissional em TI<br />Consul...
Agenda<br />Inversão de Controlo (IoC) - Princípio<br />DependencyInjection (DI) - Padrão<br />Demo<br />Unity e Autofac c...
// Magic. Do not touch.<br />http://stackoverflow.com/questions/184618<br />
// Magic. Do not touch.<br />// When I wrote this, only God and I understood what I was doing<br />http://stackoverflow.co...
// Magic. Do not touch.<br />// When I wrote this, only God and I understood what I was doing<br />// Now, God only knows<...
// Magic. Do not touch.<br />// When I wrote this, only God and I understood what I was doing<br />// Now, God only knows<...
Inversão de Controlo (IoC)<br />Numa hierarquia, os módulos de nível mais alto não devem depender directamente dos módulos...
Inversão de Controlo (IoC)<br />Numa hierarquia, os módulos de nível mais alto não devem depender directamente dos módulos...
Exemplo (simples) da Violação do Princípio<br />public class SessoesNetPontoService<br />{<br />    public IEnumerable<Ses...
Exemplo (simples) da Violação do Princípio<br />public class SessoesNetPontoService<br />{<br />    public IEnumerable<Ses...
Exemplo (simples) da Violação do Princípio<br />Precisamosabstrairestadependência.<br />Dependency Injection FTW :)<br />p...
Injecção de Dependências (DI)<br />Técnica / Padrão de Implementação<br />Diferentes Formas de Implementar<br />Constructo...
IoC – Antes e depois<br />demonstração<br />
IoC Containers<br />Bibliotecas de suporte a DI<br />Implementam<br />Registo de implementações de serviços<br />Resolução...
Unity: DI Container<br />“Application Block” da Microsoft<br />http://unity.codeplex.com<br />Actualmente na versão 2.0.<b...
Autofac: DI Container<br />Open-Source<br />http://code.google.com/p/autofac/<br />Actualmente na versão 2.2.4<br />Versão...
Utilização de ContainersUnity e Autofac<br />demonstração<br />
Outros containers para DI<br />Castle Windsor<br />http://www.castleproject.org/container/index.html<br />Ninject<br />htt...
Resumo<br />Dependency Injection<br />Classes independentesumas das outrasatravés de abstrações.<br />Menorimpactoparaintr...
Questões?<br />
Patrocinadores deste evento<br />
Próximas reuniões presenciais<br />18/09/2010 - Setembro<br />23/10/2010 - Outubro<br />20/11/2010 - Novembro<br />11/12/2...
Obrigado!<br />Bruno Lopes<br />brunomlopes@netponto.org<br />http://brunomlopes.com<br />http://twitter.com/brunomlopes<b...
Inversão de Controlo (IoC) / Injecção de Dependência (DI)
Upcoming SlideShare
Loading in …5
×

Inversão de Controlo (IoC) / Injecção de Dependência (DI)

2,465 views
2,338 views

Published on

Apresentação sobre Inversão de Controlo (IoC) / Injecção de Dependência (DI) por Bruno Lopes e Caio Proiete (MVP), no evento de aniversário da comunidade NetPonto

Published in: Technology, Business
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
2,465
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
23
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide
  • Suporta relaçoes como Lazy&lt;T&gt;, Func&lt;T&gt;, IEnumerable&lt;T&gt;http://code.google.com/p/autofac/wiki/RelationshipTypes
  • Inversão de Controlo (IoC) / Injecção de Dependência (DI)

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

    ×