inversão de controlo (ioc) / injecção de dependência (di)
DESCRIPTION
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 NetPontoTRANSCRIPT
Inversão de Controlo (IoC) / Injecção de Dependência (DI)
Bruno Lopes e Caio Proiete
http://netponto.org14ª Reunião Presencial - 18/09/2010
Bruno Lopes
• 5 anos de experiência profissional em IT
• Co-Fundador da weListen, Business Solutions
• Ex-Sysadmin• Pythonista nos tempos
livres
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
Caio Proiete
Agenda
• Inversão de Controlo (IoC) - Princípio• Dependency Injection (DI) - Padrão–Demo
• Unity e Autofac como containers para DI–Demo
• Outros containers para DI
Também disponível em vídeo...
Assista!http://www.vimeo.com/20080387
// Magic. Do not touch.
http://stackoverflow.com/questions/184618
// Magic. Do not touch.
// When I wrote this, only God and I understood what I was doing
http://stackoverflow.com/questions/184618
// 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
// 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
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.
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.
public class SessoesNetPontoService{ public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new NetPontoDataService();
return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) }}
Exemplo (simples) da Violação do Princípio
Inversão de Controlo (IoC)
public class SessoesNetPontoService{ public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new NetPontoDataService();
return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) }}
Exemplo (simples) da Violação do Princípio
Inversão de Controlo (IoC)
public class SessoesNetPontoService{ public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new NetPontoDataService();
return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) }}
Exemplo (simples) da Violação do PrincípioPrecisamos abstrair esta
dependência.Dependency Injection FTW :)
Inversão de Controlo (IoC)
Injecção de Dependências (DI)
• Técnica / Padrão de Implementação• Diferentes Formas de Implementar–Constructor Injection*– Setter Injection– Interface Injection* mais comum
IoC – Antes e depois
demonstração
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
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
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
Utilização de ContainersUnity e Autofac
demonstração
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 mais algumas opções– http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
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.
Questões?
Patrocinadores deste evento
Próximas reuniões presenciais
• 18/09/2010 - Setembro• 23/10/2010 - Outubro• 20/11/2010 - Novembro• 11/12/2010 - Dezembro
Reserva estes dias na agenda! :)
Obrigado!Bruno [email protected]://brunomlopes.comhttp://twitter.com/brunomlopes
Caio [email protected]://caioproiete.comhttp://twitter.com/caioproiete