Frage

Ich las über Injection von Hand und Ninjection (sowie Warum Ninject verwenden). Ich traf zwei Stücke Verwirrung:

  1. Die Inject von Hand Technik bin ich bereits vertraut, aber ich bin nicht mit Ninjection, und damit bin nicht sicher, wie das komplette Programm funktionieren würde. Vielleicht würde es helfen, eher ein komplettes Programm zu schaffen, als, wie auf dieser Seite durchgeführt wird, ein Programm zeigt, in Stücke zerbrochen

  2. ich noch nicht wirklich bekommen, wie dies macht die Dinge einfacher. Ich glaube, ich bin fehlt etwas Wichtiges. Ich kann Art sehen, wie ein Injektions Rahmen wäre hilfreich, wenn Sie eine Gruppe von Injektionen wurden Erstellen und dann zwischen zwei großen Gruppen auf einmal Schalen (dies ist nützlich für die spöttischen, unter anderem), aber ich denke, es mehr ist als die. Aber ich bin nicht sicher, was. Oder vielleicht brauche ich nur noch mehr Beispiele dafür, warum dies ist spannend zu Hause den Punkt zu fahren.

War es hilfreich?

Lösung

Wenn Sie Ihre Abhängigkeiten ohne DI Rahmen Injizieren Sie mit Pfeil Code am Ende alle über Ihre Anwendung zu sagen Klassen, wie sie ihre Abhängigkeiten zu bauen.

    public Contact()
        : this(new DataGateWay())
    {
    }

Aber wenn Sie so etwas wie Ninject verwenden, werden alle der Pfeil-Code ist an einer Stelle macht es einfacher, eine Abhängigkeit für alle Klassen ändern Sie es.

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}

Andere Tipps

  
    

ich noch nicht wirklich bekommen, wie dies macht die Dinge einfacher. Ich glaube, ich bin fehlt etwas Wichtiges.

  

Wäre es nicht wäre toll, wenn wir nur diskrete Komponenten zu entwickeln haben, wo jede einzelne Funktionalität versehen wir leicht verstehen konnten, Wiederverwendung und pflegen. Wo wir nur gearbeitet Komponenten.

Was hindert uns daran, so zu tun, ist, dass wir eine Infrastruktur benötigen, die irgendwie kombinieren und diese Komponenten in eine funktionierende Anwendung verwalten automatisch . Infrastruktur, die dies tut, ist uns zur Verfügung -. IOC-Rahmen

So ein Rahmen IOC ist nicht über Verwalten von Abhängigkeiten oder Prüfungen oder Konfiguration. Stattdessen ist es über Komplexität der Verwaltung, von Ihnen nur Arbeit ermöglicht und darüber nachdenken, Komponenten.

Es erlaubt Ihnen leicht, Ihren Code zu testen, indem die Schnittstellen spöttisch, die Sie für einen bestimmten Codeblock benötigen. Es erlaubt Ihnen auch problemlos weitere Funktionen tauschen, ohne dass andere Teile des Codes zu brechen.

Es geht um Zusammenhalt und Kupplung.

Sie werden wahrscheinlich den Vorteil auf kleine Projekte nicht sehen, aber wenn man einmal klein bekommen wird es wirklich offensichtlich, wenn Sie Änderungen am System vornehmen müssen. Es ist ein Kinderspiel, wenn Sie DI verwendet haben.

Ich mag die autowiring Aspekt einiger Frameworks ... wenn Sie sich um mich nicht, was Ihre Typen müssen instanziiert werden.

EDIT: Ich lese diesen Artikel von Ayende @ Rahien . Und ich unterstütze seinen Punkt wirklich.

Dependency Injection meist Frameworks kann zur Laufzeit konfiguriert werden, ohne dass eine erneute Kompilierung erforderlich ist.

Dependency Injection kann wirklich interessant, wenn Sie Ihren Code zu dem Punkt, wo es überhaupt nur sehr wenige Abhängigkeiten im Code ist. Einige Dependency Injection-Frameworks ermöglicht es Ihnen, Ihre Abhängigkeiten in einer Konfigurationsdatei zu definieren. Dies kann sehr nützlich sein, wenn Sie eine wirklich flexible Software benötigen, die ohne Änderung der Code geändert werden muss. Zum Beispiel ist Workflow-Software ein Hauptkandidat für diese Art der Lösung.

Dependency Injection ist wesentlich für die Komponente Driven Development . Letzteres erlaubt zu bauen wirklich komplex Anwendungen in einer wesentlich effizienter und zuverlässiger Weise.

Auch ermöglicht es gemeinsame Querschnittsthemen sauber von dem anderen Code (dies führt zu mehr wiederverwendbar und flexibel Code-Basis) zu trennen.

Weiterführende Links:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top