2010-07-20 2 views
8

Was ist eine gute Analogie, um IoC und DI zu verstehen?Was ist eine gute Analogie, um IoC und DI zu verstehen?

+0

Duplizieren: http://stackoverflow.com/questions/424457/does-anyone-have-a-good-analogy-for-dependency- injection –

+0

Siehe auch http://stackoverflow.com/questions/1638919/how -zu-erklären-Abhängigkeit-Injektion-zu-5-Jahre alt –

+0

Überprüfen Sie dies: http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html – Vishal

Antwort

8

Wenn Sie das klassische Beispiel eines Auto nehmen. Sie könnten den regulären Auto Kaufprozess durchlaufen und nehmen Sie die Räder der Hersteller gibt Ihnen:

public class Fifteens 
{ 
    public void Roll() { Console.WriteLine("Nice smooth family ride..."); } 
} 

public class Car 
{ 
    Fifteens wheels = new Fifteens(); 

    public Car() { } 

    public void Drive() { wheels.Roll; } 
} 

Dann:

Car myCar = new Car(); 
myCar.Drive() // Uses the stock wheels 

Oder Sie könnten einen benutzerdefinierten Autobauer finden, die Sie genau angeben können, welche Art von Rad Sie Ihr Auto zu benutzen, solange sie den Spezifikationen eines Rades entsprechen:

public interface IWheel 
{ 
    void Roll(); 
} 

public class Twenties : IWheel 
{ 
    public void Roll() { Console.WriteLine("Rough Ridin'..."); 
} 

public class Car 
{ 
    IWheel _wheels; 

    public Car(IWheel wheels) { _wheels = wheels; } 

    public void Drive() { wheels.Roll(); } 
} 

Dann:

Car myCar = new Car(new Twenties()); 
myCar.Drive(); // Uses the wheels you injected. 

Aber jetzt können Sie jede Art von Rad injizieren, die Sie wollen. Beachten Sie, dass dies nur eine Art von Dependency Injection (Konstruktor Injektion) ist, aber es ist eines der einfachsten Beispiele.

2

Es gibt ein paar verschiedene Analogien, die das Verständnis der Inversion der Kontrolle erleichtern. Wir erleben dies auf viele verschiedene Arten im normalen Leben, also leihen wir das Formular im Code aus. Eine Analogie wird im Militär als "Befehlskette" bezeichnet.

Dies ist wahrscheinlich die klarste Parallele zur Inversion der Kontrolle. Das Militär stellt jedem neuen Rekruten die grundlegenden Dinge zur Verfügung, die er benötigt, um in seinem Rang zu operieren, und er gibt Befehle aus, die Rekruten befolgen müssen. Das gleiche Prinzip gilt für den Code. Jede Komponente erhält die Bestimmungen, die sie benötigt, um von der instanziierenden Einheit (d. H. Kommandierender Offizier in dieser Analogie) zu operieren. Die Instanziierungseinheit wirkt dann auf diese Komponente ein, wie sie agieren muss.

Mehr hier:

Does anyone have a good analogy for dependency injection?

Verwandte Themen