Por que a injeção de dependência usar um?
resposta 1
Eu acho que um monte de vezes as pessoas ficam confusas sobre a diferença entre a injeção de dependência e uma injeção de dependência quadro (ou um recipiente como muitas vezes é chamado).
Injeção de dependência é um conceito muito simples. Em vez de este código:
public class A { private B b; public A() { this.b = new B(); // A *depends on* B } public void DoSomeStuff() { // Do something with B here } } public static void Main(string[] args) { A a = new A(); a.DoSomeStuff(); }
você escrever código como este:
public class A { private B b; public A(B b) { // A now takes its dependencies as arguments this.b = b; // look ma, no "new"! } public void DoSomeStuff() { // Do something with B here } } public static void Main(string[] args) { B b = new B(); // B is constructed here instead A a = new A(b); a.DoSomeStuff(); }
E é isso. Seriamente. Isto dá-lhe uma tonelada de vantagens. Os dois mais importantes são a capacidade de funcionalidade de controle de um lugar central (a Main()
função) em vez de espalhá-la em todo o seu programa, e a capacidade de mais facilmente testar cada classe isoladamente (porque você pode passar simulações ou outros objetos falsificadas em seu construtor vez de um valor real).
A desvantagem, claro, é que agora você tem um mega-função que sabe sobre todas as classes usadas pelo seu programa. Isso é o que os quadros de DI pode ajudar com. Mas se você está tendo dificuldade para entender por que esta abordagem é valiosa, eu recomendo começando com injeção de dependência manual do primeiro, para que possa apreciar melhor o que os vários quadros lá fora, pode fazer por você.
Dependency Injection Demystified
A resposta é simplificar a compreensão do conceito, eo autor contra outra celebridade vai complicar conceito
Inversão de Controle Containers e o padrão Dependency Injection . Martin Fowler é meu autor favorito. Normalmente, ele é clara e concisa. Aqui, ele consegue fazer som injeção de dependência terrivelmente complicado. Ainda assim, este artigo tem uma discussão aprofundada das várias formas de injeção de dependência podem ser alterados.