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.
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
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)
public class SessoesTechDaysService { public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } }
public class SessoesTechDaysService { public IEnumerable<Sessao> ObterSessoesDo(string nomeOrador) { var service = new TechDaysDataService(); return service.ObterSessoes() .Where(s => s.Orador.Nome == nomeOrador) } }
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 :)
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.