11. Inversão de dependência Abstração serviço Abstração de acesso a dados Abstração de utilidades Serviço Acesso a dados Utilidades Interface gráfica
12. Recursos úteis Robert C. Martin (Uncle Bob) : Solid: butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod DI: objectmentor.com/resources/articles/dip.pdf Martin Fowler: martinfowler.com/bliki/InversionOfControl.html e http://martinfowler.com/articles/injection.html Wikipedia: en.wikipedia.org/wiki/Inversion_of_control
13.
14.
15. Sem injeção public class RepositorioPost { private GerenciadorConexaoBD _gerenciador; public RepositorioPost() { _gerenciador = new GerenciadorConexaoBD (); } }
16. Com Injeção public class RepositorioPost { private GerenciadorConexaoBD _gerenciador; public RepositorioPost( GerenciadorConexaoBD gerenciador) { _gerenciador = gerenciador ; } }
17. Injeção pobre public class RepositorioPost { private IGerenciadorConexaoBD _gerenciador; public RepositorioPost() : this(new GerenciadorConexaoBD ()) {} public RepositorioPost( IGerenciadorConexaoBD gerenciador) { _gerenciador = gerenciador; } }
26. Constructor Injection public class RepositorioPost { public RepositorioPost( IGerenciadorConexaoBD gerenciador) { _gerenciador = gerenciador ; } } Classe com dependência:
28. Property Injection public class RepositorioPost { [ Dependency ] public IGerenciadorConexaoBD Gerenciador { get ; set ; } } Classe com dependência:
34. Pós construção public class RepositorioPost { private IGerenciadorConexaoBD _gerenciador; [ InjectionMethod ] public void Configurar( IGerenciadorConexaoBD gerenciador) { _gerenciador = gerenciador; } } Classe com dependência:
43. Teste // Arrange const string titulo = "Um titulo" ; var repositorio = new Mock < IRepositorioPost > ( MockBehavior .Strict); var post = new Post { Id = 1, Corpo = "corpo" , Titulo = titulo }; repositorio.Setup( r => r.ObterPost(titulo)).Returns(post); var controller = new PostsController (repositorio.Object);
44. Teste // Act var result = controller.Post(titulo) as ViewResult ; // Assert Assert .IsNotNull(result); Assert .IsNotNull(result.ViewData.Model); Assert .AreEqual(post, result.ViewData.Model); repositorio.VerifyAll();
47. Recursos úteis Unity no Codeplex: unity.codeplex.com Unity no MSDN : msdn.microsoft.com/unity EntLib no Codeplex: entlib.codeplex.com EntLib no MSDN: msdn.microsoft.com/entlib Hands On Labs: tinyurl.com/unity12hol Blog do Leandro Daniel: reverb.leandrodaniel.com Artigo do Leandro Daniel na .Net Magazine (edição 62):