Inversão de Controle (IoC) e Injeção de Dependência (DI) No C#
Inversão de Controle (IoC) e Injeção de Dependência (DI) No C#
Inversão de Controle (IoC) e Injeção de Dependência (DI) No C#
Inverso de Controle
Entendendo o problema
Para comear, precisamos entender o problema resolvido pela Inverso de
Controle (Inversion of Control ou IoC). Vamos imaginar a seguinte situao:
um controller Pedidos que utiliza o repositrio de pedidos para listar os
pedidos do banco de dados, por exemplo. Veja:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Injeo de Dependncia
A Injeo de Dependncia (Dependency Injection ou DI) um design
pattern para realizar a Inverso de Controle. Como j vimos acima, se a sua
classe depende de outra classe, ento devemos criar a dependncia para uma
classe abstrata. Com a sua classe dependendo de uma abstrao, devemos
injetar um objeto concreto nela.
De acordo com Martin Fowler em seu artigo sobre esse assunto, a Injeo de
Dependncia no a nica maneira de remover dependncias entre as
classes. Existe tambm o padro Service Locator, porm no tratarei dele
nesse post.
Ninject
Concluso
Nesse post vimos os conceitos de Inverso de Controle e Injeo de
Dependncia, entendendo os problemas que eles resolvem e como
implementar em C#. Utilizamos o Ninject.MVC3 para facilitar nosso trabalho.
Os benefcios de utilizar esse padro com certeza ficaro cada vez mais
evidentes conforme sua aplicao aumenta de proporo e vai se tornando
mais complexa. Pode ser que voc gaste um pouquinho mais de tempo para
implementar a injeo de dependncia, mas com certeza ganhar mais tempo
na testabilidade e manutenibilidade da aplicao.
Referncias
http://martinfowler.com/articles/injection.html
http://viniciusquaiato.com/blog/injecao-de-dependencia/
http://www.linhadecodigo.com.br/artigo/3418/inversao-decontrole-ioc-e-injecao-de-dependencia-di-diferencas.aspx