SlideShare ist ein Scribd-Unternehmen logo
1 von 27
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
Bruno Lopes 5 anos de experiência profissional em IT Co-Fundador da weListen, Business Solutions Ex-Sysadmin Pythonista nos tempos livres
                                  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
Agenda Inversão de Controlo (IoC) - Princípio DependencyInjection (DI) - Padrão Demo Unity e Autofac como containerspara 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.
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)
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)
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)
Injecção de Dependências (DI) Técnica / Padrão de Implementação Diferentes Formas de Implementar ConstructorInjection* SetterInjection 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 maisalgumasopções http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
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.
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 - DezembroReserva estes dias na agenda! :)
Obrigado! Bruno Lopes brunomlopes@netponto.org http://brunomlopes.com http://twitter.com/brunomlopes Caio Proiete caio@netponto.org http://caioproiete.com http://twitter.com/caioproiete

Weitere ähnliche Inhalte

Andere mochten auch

Uma Homenagem A Ti.
Uma Homenagem A Ti.Uma Homenagem A Ti.
Uma Homenagem A Ti.JNR
 
Eproinfobiancareginachristiane
EproinfobiancareginachristianeEproinfobiancareginachristiane
Eproinfobiancareginachristianebiancams
 
Expressoes Idiomaticas Sem Efeitos
Expressoes Idiomaticas Sem EfeitosExpressoes Idiomaticas Sem Efeitos
Expressoes Idiomaticas Sem EfeitosAna Passos
 
Vida
VidaVida
VidaJNR
 
ReméDio Para Nao Envelhecer
ReméDio Para Nao EnvelhecerReméDio Para Nao Envelhecer
ReméDio Para Nao EnvelhecerJNR
 
Meia Idade
Meia IdadeMeia Idade
Meia IdadeJNR
 
Pai Nosso Som
Pai Nosso   SomPai Nosso   Som
Pai Nosso SomJNR
 
Faca Alguem Feliz
Faca  Alguem  FelizFaca  Alguem  Feliz
Faca Alguem FelizJNR
 
EstratéGias Mentais
EstratéGias MentaisEstratéGias Mentais
EstratéGias MentaisJNR
 
[Video] como ganhar mais de 50 mil dólares
[Video] como ganhar mais de 50 mil dólares [Video] como ganhar mais de 50 mil dólares
[Video] como ganhar mais de 50 mil dólares RAM
 
Introdução ao NHibernate ORM Framework - Luis Amorim
Introdução ao NHibernate ORM Framework - Luis AmorimIntrodução ao NHibernate ORM Framework - Luis Amorim
Introdução ao NHibernate ORM Framework - Luis AmorimComunidade NetPonto
 
Angustia
AngustiaAngustia
AngustiaJNR
 
Eleições 2014 - Batalha de Páginas
Eleições 2014 - Batalha de Páginas Eleições 2014 - Batalha de Páginas
Eleições 2014 - Batalha de Páginas Elife Brasil
 
A Piada Que Dá Sorte
A Piada Que Dá SorteA Piada Que Dá Sorte
A Piada Que Dá SorteJNR
 
OraçãO Do Matuto
OraçãO Do MatutoOraçãO Do Matuto
OraçãO Do MatutoJNR
 
Compartilhando Suas IdéIas, SugestõEs E Problemas
Compartilhando Suas IdéIas, SugestõEs E ProblemasCompartilhando Suas IdéIas, SugestõEs E Problemas
Compartilhando Suas IdéIas, SugestõEs E Problemasequipepar
 
Arquivo Secreto
Arquivo SecretoArquivo Secreto
Arquivo SecretoJNR
 
Imagens Para Descontrair
Imagens Para DescontrairImagens Para Descontrair
Imagens Para DescontrairJNR
 

Andere mochten auch (20)

Uma Homenagem A Ti.
Uma Homenagem A Ti.Uma Homenagem A Ti.
Uma Homenagem A Ti.
 
Eproinfobiancareginachristiane
EproinfobiancareginachristianeEproinfobiancareginachristiane
Eproinfobiancareginachristiane
 
Expressoes Idiomaticas Sem Efeitos
Expressoes Idiomaticas Sem EfeitosExpressoes Idiomaticas Sem Efeitos
Expressoes Idiomaticas Sem Efeitos
 
Ativ01 Ro Cardoso
Ativ01 Ro CardosoAtiv01 Ro Cardoso
Ativ01 Ro Cardoso
 
Vida
VidaVida
Vida
 
ReméDio Para Nao Envelhecer
ReméDio Para Nao EnvelhecerReméDio Para Nao Envelhecer
ReméDio Para Nao Envelhecer
 
Meia Idade
Meia IdadeMeia Idade
Meia Idade
 
Pai Nosso Som
Pai Nosso   SomPai Nosso   Som
Pai Nosso Som
 
Faca Alguem Feliz
Faca  Alguem  FelizFaca  Alguem  Feliz
Faca Alguem Feliz
 
EstratéGias Mentais
EstratéGias MentaisEstratéGias Mentais
EstratéGias Mentais
 
[Video] como ganhar mais de 50 mil dólares
[Video] como ganhar mais de 50 mil dólares [Video] como ganhar mais de 50 mil dólares
[Video] como ganhar mais de 50 mil dólares
 
Introdução ao NHibernate ORM Framework - Luis Amorim
Introdução ao NHibernate ORM Framework - Luis AmorimIntrodução ao NHibernate ORM Framework - Luis Amorim
Introdução ao NHibernate ORM Framework - Luis Amorim
 
Angustia
AngustiaAngustia
Angustia
 
Eleições 2014 - Batalha de Páginas
Eleições 2014 - Batalha de Páginas Eleições 2014 - Batalha de Páginas
Eleições 2014 - Batalha de Páginas
 
A Piada Que Dá Sorte
A Piada Que Dá SorteA Piada Que Dá Sorte
A Piada Que Dá Sorte
 
OraçãO Do Matuto
OraçãO Do MatutoOraçãO Do Matuto
OraçãO Do Matuto
 
Compartilhando Suas IdéIas, SugestõEs E Problemas
Compartilhando Suas IdéIas, SugestõEs E ProblemasCompartilhando Suas IdéIas, SugestõEs E Problemas
Compartilhando Suas IdéIas, SugestõEs E Problemas
 
Arquivo Secreto
Arquivo SecretoArquivo Secreto
Arquivo Secreto
 
Imagens Para Descontrair
Imagens Para DescontrairImagens Para Descontrair
Imagens Para Descontrair
 
Rossi Litorâneo
Rossi LitorâneoRossi Litorâneo
Rossi Litorâneo
 

Ähnlich wie Inversão de Controlo (IoC) / Injecção de Dependência (DI) - Bruno Lopes & C. Augusto Proiete

ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)Giovanni Bassi
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringHenrique Weissmann
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkLuciano Condé
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOPelliando dias
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Laboratório -configuração_de_um_endereço_de_gerenciamento_do_switch-1
Laboratório  -configuração_de_um_endereço_de_gerenciamento_do_switch-1Laboratório  -configuração_de_um_endereço_de_gerenciamento_do_switch-1
Laboratório -configuração_de_um_endereço_de_gerenciamento_do_switch-1WalissonMartinsdeSou
 
ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)Giovanni Bassi
 
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
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Emerson Saito
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Demoiselle - Arquitetura
Demoiselle - ArquiteturaDemoiselle - Arquitetura
Demoiselle - ArquiteturaSerge Rehem
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
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
 
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)Giovanni Bassi
 

Ähnlich wie Inversão de Controlo (IoC) / Injecção de Dependência (DI) - Bruno Lopes & C. Augusto Proiete (20)

Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com Spring
 
IoC, DI e SL
IoC, DI e SLIoC, DI e SL
IoC, DI e SL
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity Framework
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOP
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Laboratório -configuração_de_um_endereço_de_gerenciamento_do_switch-1
Laboratório  -configuração_de_um_endereço_de_gerenciamento_do_switch-1Laboratório  -configuração_de_um_endereço_de_gerenciamento_do_switch-1
Laboratório -configuração_de_um_endereço_de_gerenciamento_do_switch-1
 
ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)ASP.Net MVC 3 - o que há de novo (TechEd)
ASP.Net MVC 3 - o que há de novo (TechEd)
 
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
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL
 
O Futuro do Plone
O Futuro do PloneO Futuro do Plone
O Futuro do Plone
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Demoiselle - Arquitetura
Demoiselle - ArquiteturaDemoiselle - Arquitetura
Demoiselle - Arquitetura
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
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
 
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)ASP.NET MVC para desenvolvedores Web Forms (TechEd)
ASP.NET MVC para desenvolvedores Web Forms (TechEd)
 

Mehr von Comunidade NetPonto

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Comunidade NetPonto
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Comunidade NetPonto
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaComunidade NetPonto
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Comunidade NetPonto
 

Mehr von Comunidade NetPonto (20)

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
Continuous Delivery for Desktop Applications: a case study - Miguel Alho & Jo...
 
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
Criando aplicações para windows phone 8.1 e windows 8.1 com o app studio da...
 
MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 

Kürzlich hochgeladen

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Kürzlich hochgeladen (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

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
  • 5. Também disponível em vídeo... Assista! http://www.vimeo.com/20080387
  • 6.
  • 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
  • 17. IoC – Antes e depois demonstração
  • 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
  • 21. Utilização de ContainersUnity e Autofac demonstração
  • 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! :)
  • 27. Obrigado! Bruno Lopes brunomlopes@netponto.org http://brunomlopes.com http://twitter.com/brunomlopes Caio Proiete caio@netponto.org http://caioproiete.com http://twitter.com/caioproiete

Hinweis der Redaktion

  1. Suporta relaçoes como Lazy&lt;T&gt;, Func&lt;T&gt;, IEnumerable&lt;T&gt;http://code.google.com/p/autofac/wiki/RelationshipTypes