2017-05-23 6 views
-1

Ich bin in DI verwirrt. Ich habe viele Artikel gesehen, die erklärt, dass DI mithilfe von Konstruktor implementiert werden kann und einige Artikel erwähnt DI mit Ninject. Daher kann ich den Einsatz von Ninject nicht verstehen. Wenn ninject nicht vorhanden ist, funktioniert auch der Code. Können Sie bitte erklären, was der Vorteil der Verwendung von Ninject ist.DI mit Ninject

Antwort

3

Zitiert Darin Dimitrov

Was für mich Ninject bieten nicht mit, dass ich nicht nur folgenden grundlegenden Prinzipien der losen Kopplung tun kann?

  • weniger Codezeilen in der Composition Root
  • Ein Standard-Container Ihr Objekt für den Umgang mit Lebensdauern
  • Viele Plugins für die Injektion in spezifischen Kontexten wie klassische WebForms, ASP.NET MVC, ASP.NET Web API
  • Möglichkeit zu entsorgen automatisch IDisposable
  • ... Objekte

Alle Dinge, die Sie sho old handle sonst manuell. Davon abgesehen ist das DI-Framework von geringer Bedeutung. Es sollte schnell sein und die spezifischen Funktionen bieten, die Sie für Ihre Anwendung benötigen. Das DI-Framework sollte jedoch in keiner Weise die Art beeinflussen, in der Sie Ihren Code und die verschiedenen Ebenen in Ihrer Anwendung lose miteinander verknüpfen (Programmierung gegen Interfaces und abstrakte Klassen, um die Kopplung zwischen den verschiedenen Ebenen Ihrer Anwendung zu schwächen).

Denken Sie also an das DI-Framework als etwas, das nur in der Composition Root Ihrer Anwendung eingreift und als Framework, das Sie blitzschnell durch ein anderes Framework ersetzen oder sogar Ihre Objektlebensdauern manuell handhaben könnten.

Zum Beispiel ist der Code, den Sie in Ihrer Frage gezeigt haben, sehr schlecht, da er Ihre Layer an ein bestimmtes DI-Framework bindet. Diese [Inject] Attribut dort ist wie ein Krebs. Dies bedeutet, dass Ihr Anwendungscode auf einem bestimmten DI-Framework beruht.

Auch ich empfehle Ihnen, lesen Sie diese book.

+1

Eine [2. Auflage dieses Buches] (https://www.manning.com/seemann2/) ist derzeit in der Herstellung und Kapitel 3 wird in Kürze veröffentlicht werden. – Steven

Verwandte Themen