Okay, also ich bin auf der Suche nach bestimmten Tipps über Dependency Injection und wie man es benutzt.DI Constructor Injection Neatness
Grundsätzlich habe ich eine MVC-Website, die Ninject (und das Ninject MVC-Paket) verwendet. Wenn ich also die MVC-Seite erstelle, verwende ich die Konstruktorinjektion in den Controllern. Das ist in Ordnung, aber IMO ein bisschen "hässlich", aber die Hauptsache, die ich nicht mag, ist es, alle injizierten Repositories in die anderen Klassen zu übergeben, es scheint nur ein bisschen OTT wie 6 Repositories-8 Repositories passieren zu müssen eine statische Methode oder ein Objektkonstruktor.
Nicht zu erwähnen, dass ich auf einigen meiner Seiten an fast jedem Repository arbeiten muss, damit der Controller-Constructor riesig und nicht überschaubar wird.
Gibt es noch andere Optionen, die meinen Code nicht so sehr durcheinander bringen? Ich möchte sie nicht wirklich als einzelne "Einstellungs" -Objekte weitergeben, da dies das Problem nur auf eine andere Codezeile verschiebt.
Ich verwende auch die gleichen Klassenbibliotheken für Konsolen/Desktop-Anwendungen. Ich mag die Idee, DependencyResolver.Current in den Klassenbibliotheken zu verwenden, aber jeder sagt, dies ist ein Anti-Pattern und Konstruktorinjektion sollte verwendet werden.
Haben Sie vielleicht eine MyProjectDIContext-Klasse, die ein Wörterbuch hat, das ich mit den injizierten Typen in den Controller-Konstruktoren auffüllen kann, und dann den Kontext an alle Methoden wie benötigt übergeben?
Ich habe nach dem Antwort-Bit gesucht Ich kann nicht ganz scheinen, etwas zu finden, das gut passt.
Können Sie die anderen Klassen nicht einfach mit ninject registrieren und dann die Repositories direkt in diese Klassen einfügen? – BoeseB
Wenn ich mich richtig erinnere, ohne DependencyResolver zu verwenden, könnte man dies nicht tun, weil das Problem "Turtles ganz unten" auftritt. Wenn also die DI-Klassen in den Konstruktor eines Controllers injiziert werden, muss ich die aufgelösten Klassen in jede Klasse weiterleiten, die sie verwenden möchte. In einigen Fällen mache ich genau das, aber es führt zu einer ganzen massiven Liste von Argumenten für einige kompliziertere Prozesse. Ein DependencyResolver vermeidet es, aber Sie sind dann an die Resolver-Klasse gebunden, die offensichtlich nicht gut ist. – Dwiea
Ich versuche immer noch, DI mit Konsolen-/Desktop-Apps zu finden, daher weiß ich nicht genau, wie DI mit ihnen gut funktioniert. Zum Beispiel kann ich nicht einfach "neue MyClass()" gehen und erwarten, dass es in den entsprechenden injizierten Klassen (oder kann ich?) Passieren? – Dwiea