Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Inversão de Controlo e Injecção de Dependência na .NET Framework

Inversão de Controlo e Injecção de Dependência na .NET Framework

Apresentação realizada no evento Microsoft TechDays 2010 (http://www.techdays2010.com) sobre Inversão de Controlo e Injecção de Dependência na .NET Framework.

C. Augusto Proiete

May 13, 2012
Tweet

More Decks by C. Augusto Proiete

Other Decks in Programming

Transcript

  1. • 10 anos de experiência profissional em TI • Microsoft

    Most Valuable Professional • Microsoft Certified Trainer @ CICLO • Líder da Comunidade NetPonto Caio Proiete
  2. • Inversão de Controlo (IoC) - Princípio • Dependency Injection

    (DI) - Padrão • Demo • Unity como container para DI • Demo • Outros containers para DI Agenda
  3. // Magic. Do not touch. // When I wrote this,

    only God and I understood what I was doing
  4. // Magic. Do not touch. // When I wrote this,

    only God and I understood what I was doing // Now, God only knows
  5. // 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
  6. // 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
  7. 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 abstrações. As abstrações não devem depender de detalhes de implementação, mas os detalhes devem depender das abstrações. Inversão de Controlo (IoC)
  8. Inversão de Controlo (IoC) Exemplo (simples) da Violação do Princípio

    public class SessoesTechDaysService { public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } }
  9. Inversão de Controlo (IoC) Exemplo (simples) da Violação do Princípio

    public class SessoesTechDaysService { public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } }
  10. Inversão de Controlo (IoC) Exemplo (simples) da Violação do Princípio

    public class SessoesTechDaysService { public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } } Precisamos abstrair esta dependência. Dependency Injection FTW :)
  11. • Técnica / Padrão de Implementação • Diferentes Formas de

    Implementar • Constructor Injection* • Setter Injection • Interface Injection * mais comum Injecção de Dependências (DI)
  12. • “Application Block” da Microsoft disponível no CodePlex • http://unity.codeplex.com

    • Actuamente na versão 2.0. • Parte integrante da Enterprise Library • http://entlib.codeplex.com Unity: DI Container
  13. Outros containers para DI • Autofac • http://code.google.com/p/autofac • 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 mais algumas opções • http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
  14. Resumo • Dependency Injection • Classes independentes umas das outras

    através de abstrações. • Menor impacto para introdução de mudanças e código mais fácil de testar. • Diferentes formas de implementar (Constructor, Setter, Interface, entre outras... • Normalmente utiliza-se algum tipo de Container para as dependências. Várias opções disponíveis.
  15. A sua opinião é importante! Complete o questionário de avaliação

    e devolva-o à saida. A sua opinião é importante! Complete o questionário de avaliação e devolva-o à saida.