Best Practices zur Abhängigkeitsinjektion

8

Ich verwende Dependency Injection in meinem Code (mit Ninject ) und dachte, dass es mir ganz gut geht, bis ich auf ein Performance-Problem gestoßen bin, das war verursacht durch ein Missverständnis, wo DI-Container in Ihren Code passen. Es scheint eine Menge Informationen darüber zu geben, wie DI-Frameworks zu verwenden sind, aber nicht zu sehr darüber, wo sie nicht verwendet werden sollten oder wie sie am besten zu verwenden sind (zumindest das, was ich finden konnte).

Ich dachte, ich würde schreiben, was ich für gute Praktiken hielt, und sehen, ob andere Leute mir zustimmen und welche anderen Best Practices die Leute machen können.

  • Verwenden Sie einen Kernel pro Anwendung oder AppDomain
  • Verwenden Sie den DI-Container nur für langlebige Singleton-Objekte, verwenden Sie Factories (oder andere Methoden) für kurzlebige transiente Objekte)
  • Bevorzugt wird die Contructor Injection über Property oder Field injection
  • Objekte anfragen, baue sie nicht
  • andere ?? Hinweise auf gute Blog-Artikel / Artikel ??
Jeffrey Cameron 29.10.2009, 11:39
quelle

2 Antworten

7

Hier ist eine kurze Liste der wichtigsten Punkte (von denen einige auch im OP erscheinen):

  • Code sollte nicht wissen, welcher DI-Container (falls vorhanden) verwendet wird
  • Verfassen Sie die gesamte Anwendung im Stammverzeichnis der Anwendung (der Kompositionswurzel)
  • Favor Constructor Injection

Ich kann nicht sagen, dass ich Ihrer Meinung über Singleton vs. Transient-Objekte zustimme. Der entscheidende Punkt von DI ist, dass ein externer Mechanismus (z. B. ein DI-Container) die Lebensdauer einer bestimmten Abhängigkeit bestimmt, nicht einer anderen, so dass alle Abhängigkeiten vom DI-Container verwaltet werden müssen.

    
Mark Seemann 29.10.2009, 11:48
quelle
4
  

Verwenden Sie den DI-Container nur für langlebige Singleton-Objekte, verwenden Sie Factories (oder andere Methoden) für kurzlebige transiente Objekte)

Aber verwenden Sie DI, um die Fabriken dort einzuspritzen, wo sie gebraucht werden.

    
flukus 03.11.2009 01:56
quelle