SlideShare a Scribd company logo
1 of 23
Inversão de Controlo e Injecção de
  Dependência no .NET Framework
Caio Proiete

•   10 anos de experiência profissional em TI
•   Microsoft Most Valuable Professional
•   Microsoft Certified Trainer @ CICLO
•   Líder da Comunidade NetPonto
Agenda

• Inversão de Controlo (IoC) - Princípio
• Dependency Injection (DI) - Padrão
  • Demo
• Unity como container para DI
  • Demo
• Outros containers para DI
// Magic. Do not touch.
// Magic. Do not touch.

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

// When I wrote this, only God and I
understood what I was doing
// Now, God only knows
// 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
// 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
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 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)

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)
    }
}
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)
    }
}
Inversão de Controlo (IoC)

Exemplo (simples) da Violação do Princípio

        Precisamos abstrair esta dependência.
public class SessoesTechDaysService
{            Dependency Injection FTW :)
    public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador)
    {
        var service = new TechDaysDataService();

        return service.ObterSessoes()
            .Where(s => s.Orador.Nome == nomeOrador)
    }
}
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
Injecção de Dependência (DI)

Demo
Unity: DI Container

• “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: Container para DI

Demo
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
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.
Q&A
A sua opinião é importante!
Complete o questionário de
avaliação e devolva-o à saida.
IoC e DI no .NET
IoC e DI no .NET

More Related Content

Viewers also liked

Almacenamiento en la nube jaitziri campos
Almacenamiento en la nube jaitziri camposAlmacenamiento en la nube jaitziri campos
Almacenamiento en la nube jaitziri camposjonathan escobar reyes
 
Instantbuddies - business idea gone old
Instantbuddies - business idea gone oldInstantbuddies - business idea gone old
Instantbuddies - business idea gone oldHome
 
Ks42012 v2
Ks42012 v2Ks42012 v2
Ks42012 v2andy
 
Copyof resume navdeep-latest
Copyof resume navdeep-latestCopyof resume navdeep-latest
Copyof resume navdeep-latestNavdeep Singh
 
Pulse Design & Delivery Panel
Pulse Design & Delivery PanelPulse Design & Delivery Panel
Pulse Design & Delivery PanelMauricio Godoy
 
Comparative analysis for J&amp;PS ICT first level helpdesk
Comparative analysis for J&amp;PS ICT first level helpdeskComparative analysis for J&amp;PS ICT first level helpdesk
Comparative analysis for J&amp;PS ICT first level helpdeskDainSanye
 
IMSH2013視察報告:公開用
IMSH2013視察報告:公開用IMSH2013視察報告:公開用
IMSH2013視察報告:公開用Taro Aoki
 
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS"
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS" Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS"
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS" FRAPS
 
antihyper lipidemia & plantcons
antihyper lipidemia & plantconsantihyper lipidemia & plantcons
antihyper lipidemia & plantconsSasmita Saha
 
Sydney house prices
Sydney house pricesSydney house prices
Sydney house pricesLee Morley
 
Larangan haji
Larangan hajiLarangan haji
Larangan hajiniarniara
 
เฉลยสถาบันหลักของชาติ M.5
เฉลยสถาบันหลักของชาติ M.5เฉลยสถาบันหลักของชาติ M.5
เฉลยสถาบันหลักของชาติ M.5Kunnai- เบ้
 
Apresentação foco na vida powerpoint
Apresentação foco na vida powerpointApresentação foco na vida powerpoint
Apresentação foco na vida powerpointPAULO RICARDO FERREIRA
 

Viewers also liked (18)

Almacenamiento en la nube jaitziri campos
Almacenamiento en la nube jaitziri camposAlmacenamiento en la nube jaitziri campos
Almacenamiento en la nube jaitziri campos
 
Instantbuddies - business idea gone old
Instantbuddies - business idea gone oldInstantbuddies - business idea gone old
Instantbuddies - business idea gone old
 
Ks42012 v2
Ks42012 v2Ks42012 v2
Ks42012 v2
 
SmartCampus - Online School ERP
SmartCampus - Online School ERPSmartCampus - Online School ERP
SmartCampus - Online School ERP
 
Driving effects caffeine vs napping
Driving effects caffeine vs nappingDriving effects caffeine vs napping
Driving effects caffeine vs napping
 
Copyof resume navdeep-latest
Copyof resume navdeep-latestCopyof resume navdeep-latest
Copyof resume navdeep-latest
 
Pulse Design & Delivery Panel
Pulse Design & Delivery PanelPulse Design & Delivery Panel
Pulse Design & Delivery Panel
 
Comparative analysis for J&amp;PS ICT first level helpdesk
Comparative analysis for J&amp;PS ICT first level helpdeskComparative analysis for J&amp;PS ICT first level helpdesk
Comparative analysis for J&amp;PS ICT first level helpdesk
 
IMSH2013視察報告:公開用
IMSH2013視察報告:公開用IMSH2013視察報告:公開用
IMSH2013視察報告:公開用
 
Slide share 2 blanco
Slide share 2 blancoSlide share 2 blanco
Slide share 2 blanco
 
Khishigzaya
KhishigzayaKhishigzaya
Khishigzaya
 
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS"
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS" Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS"
Совспорт. Футбол 2016 №16 "MYFOOTBALL.WS"
 
antihyper lipidemia & plantcons
antihyper lipidemia & plantconsantihyper lipidemia & plantcons
antihyper lipidemia & plantcons
 
Sydney house prices
Sydney house pricesSydney house prices
Sydney house prices
 
Larangan haji
Larangan hajiLarangan haji
Larangan haji
 
1m Het Ongeluk
1m  Het Ongeluk1m  Het Ongeluk
1m Het Ongeluk
 
เฉลยสถาบันหลักของชาติ M.5
เฉลยสถาบันหลักของชาติ M.5เฉลยสถาบันหลักของชาติ M.5
เฉลยสถาบันหลักของชาติ M.5
 
Apresentação foco na vida powerpoint
Apresentação foco na vida powerpointApresentação foco na vida powerpoint
Apresentação foco na vida powerpoint
 

Similar to IoC e DI no .NET

CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET ReflectorNuno Gomes
 
RedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorRedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorComunidade NetPonto
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e DependênciasWende Mendes
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDIRodrigo Cândido da Silva
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaRodrigo Marques Teixeira
 
TDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhereTDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywheretdc-globalcode
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaMichel Graciano
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekLuiz Carlos Faria
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileVictor Osorio
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Fabio Vieira Mello
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 

Similar to IoC e DI no .NET (20)

CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
RedGate .NET Reflector
RedGate .NET ReflectorRedGate .NET Reflector
RedGate .NET Reflector
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
RedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programadorRedGate .NET Reflector no dia-a-dia de um programador
RedGate .NET Reflector no dia-a-dia de um programador
 
Rest Teoria E Pratica
Rest Teoria E PraticaRest Teoria E Pratica
Rest Teoria E Pratica
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDI
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
 
Microserviços
MicroserviçosMicroserviços
Microserviços
 
TDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhereTDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhere
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
 
O Futuro do Plone
O Futuro do PloneO Futuro do Plone
O Futuro do Plone
 
Ionic workshop
Ionic workshopIonic workshop
Ionic workshop
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 

More from C. Augusto Proiete

Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012
Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012
Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012C. Augusto Proiete
 
Windows 8: Desenvolvimento de Metro Style Apps
Windows 8: Desenvolvimento de Metro Style AppsWindows 8: Desenvolvimento de Metro Style Apps
Windows 8: Desenvolvimento de Metro Style AppsC. Augusto Proiete
 
Windows Workflow Foundation 4: Introdução
Windows Workflow Foundation 4: IntroduçãoWindows Workflow Foundation 4: Introdução
Windows Workflow Foundation 4: IntroduçãoC. Augusto Proiete
 
Reporting Services 2008 R2: Novidades
Reporting Services 2008 R2: NovidadesReporting Services 2008 R2: Novidades
Reporting Services 2008 R2: NovidadesC. Augusto Proiete
 
Microsoft MVP 2011 ERL - C. Augusto Proiete
Microsoft MVP 2011 ERL - C. Augusto ProieteMicrosoft MVP 2011 ERL - C. Augusto Proiete
Microsoft MVP 2011 ERL - C. Augusto ProieteC. Augusto Proiete
 
Microsoft Transcript Report - C. Augusto Proiete
Microsoft Transcript Report - C. Augusto ProieteMicrosoft Transcript Report - C. Augusto Proiete
Microsoft Transcript Report - C. Augusto ProieteC. Augusto Proiete
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Controlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitControlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitC. Augusto Proiete
 
Novidades ASP .NET MVC 3 (BETA)
Novidades ASP .NET MVC 3 (BETA)Novidades ASP .NET MVC 3 (BETA)
Novidades ASP .NET MVC 3 (BETA)C. Augusto Proiete
 
ASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesC. Augusto Proiete
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesC. Augusto Proiete
 
Novidades do Visual Basic .NET 10
Novidades do Visual Basic .NET 10Novidades do Visual Basic .NET 10
Novidades do Visual Basic .NET 10C. Augusto Proiete
 
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010C. Augusto Proiete
 
Introdução ao WCF - Windows Communication Foundation
Introdução ao WCF - Windows Communication FoundationIntrodução ao WCF - Windows Communication Foundation
Introdução ao WCF - Windows Communication FoundationC. Augusto Proiete
 
Apresentação da Comunidade NetPonto
Apresentação da Comunidade NetPontoApresentação da Comunidade NetPonto
Apresentação da Comunidade NetPontoC. Augusto Proiete
 

More from C. Augusto Proiete (19)

Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012
Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012
Developing Windows 8 Apps with HTML and JavaScript - Codebits 2012
 
Windows 8: Desenvolvimento de Metro Style Apps
Windows 8: Desenvolvimento de Metro Style AppsWindows 8: Desenvolvimento de Metro Style Apps
Windows 8: Desenvolvimento de Metro Style Apps
 
Windows Workflow Foundation 4: Introdução
Windows Workflow Foundation 4: IntroduçãoWindows Workflow Foundation 4: Introdução
Windows Workflow Foundation 4: Introdução
 
Reporting Services 2008 R2: Novidades
Reporting Services 2008 R2: NovidadesReporting Services 2008 R2: Novidades
Reporting Services 2008 R2: Novidades
 
Microsoft MVP 2011 ERL - C. Augusto Proiete
Microsoft MVP 2011 ERL - C. Augusto ProieteMicrosoft MVP 2011 ERL - C. Augusto Proiete
Microsoft MVP 2011 ERL - C. Augusto Proiete
 
Microsoft Transcript Report - C. Augusto Proiete
Microsoft Transcript Report - C. Augusto ProieteMicrosoft Transcript Report - C. Augusto Proiete
Microsoft Transcript Report - C. Augusto Proiete
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Novidades do ASP .NET MVC 3
Novidades do ASP .NET MVC 3Novidades do ASP .NET MVC 3
Novidades do ASP .NET MVC 3
 
Controlo de Versões Distribuído com Git
Controlo de Versões Distribuído com GitControlo de Versões Distribuído com Git
Controlo de Versões Distribuído com Git
 
Novidades ASP .NET MVC 3 (BETA)
Novidades ASP .NET MVC 3 (BETA)Novidades ASP .NET MVC 3 (BETA)
Novidades ASP .NET MVC 3 (BETA)
 
ASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidadesASP .NET 4.0 WebForms, Novas funcionalidades
ASP .NET 4.0 WebForms, Novas funcionalidades
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidades
 
Novidades do CSharp 4.0
Novidades do CSharp 4.0Novidades do CSharp 4.0
Novidades do CSharp 4.0
 
Novidades do Visual Basic .NET 10
Novidades do Visual Basic .NET 10Novidades do Visual Basic .NET 10
Novidades do Visual Basic .NET 10
 
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010
Nova Geração de Certificações Microsoft Visual Studio 2008 e Visual Studio 2010
 
Introdução ao WCF - Windows Communication Foundation
Introdução ao WCF - Windows Communication FoundationIntrodução ao WCF - Windows Communication Foundation
Introdução ao WCF - Windows Communication Foundation
 
ASP .NET MVC na Prática
ASP .NET MVC na PráticaASP .NET MVC na Prática
ASP .NET MVC na Prática
 
Introdução ao ASP .NET MVC
Introdução ao ASP .NET MVCIntrodução ao ASP .NET MVC
Introdução ao ASP .NET MVC
 
Apresentação da Comunidade NetPonto
Apresentação da Comunidade NetPontoApresentação da Comunidade NetPonto
Apresentação da Comunidade NetPonto
 

IoC e DI no .NET

  • 1. Inversão de Controlo e Injecção de Dependência no .NET Framework
  • 2. Caio Proiete • 10 anos de experiência profissional em TI • Microsoft Most Valuable Professional • Microsoft Certified Trainer @ CICLO • Líder da Comunidade NetPonto
  • 3. Agenda • Inversão de Controlo (IoC) - Princípio • Dependency Injection (DI) - Padrão • Demo • Unity como container para DI • Demo • Outros containers para DI
  • 4.
  • 5. // Magic. Do not touch.
  • 6. // Magic. Do not touch. // When I wrote this, only God and I understood what I was doing
  • 7. // Magic. Do not touch. // When I wrote this, only God and I understood what I was doing // Now, God only knows
  • 8. // 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
  • 9. // 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
  • 10. 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 abstrações. As abstrações não devem depender de detalhes de implementação, mas os detalhes devem depender das abstrações.
  • 11. 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) } }
  • 12. 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) } }
  • 13. Inversão de Controlo (IoC) Exemplo (simples) da Violação do Princípio Precisamos abstrair esta dependência. public class SessoesTechDaysService { Dependency Injection FTW :) public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } }
  • 14. 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
  • 16. Unity: DI Container • “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
  • 18. 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
  • 19. 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.
  • 20. Q&A
  • 21. A sua opinião é importante! Complete o questionário de avaliação e devolva-o à saida.