Einer der Hauptvorteile der Verwendung von DI/IOC ist die Reduzierung der Kopplung zwischen verschiedenen Klassen.
Wenn Sie diesen Ansatz verwenden, müssen Sie eine Hierarchie von Objekten konfigurieren, die die Abhängigkeiten ausdrücken, die Sie aus ihrem Code herausgenommen haben. Dies kann zu einer Menge Code führen. Selbst wenn Sie den Code-Teil eines DI-Frameworks verwenden, kann es den Umfang der Konfiguration erheblich reduzieren, indem es Ihnen eine ausdrucksvollere Konfiguration ermöglicht:
- Wann immer ein ILogger benötigt wird, verwenden Sie eine FileLogger.
- Sie können sogar noch weiter gehen mit Konventionen, wenn eine
I[Name]Controller wird angefordert
ersetzen Sie es durch [Name]Controller.
- Sie können es Singleton verwalten lassen Objekte für Sie verwalten. Ihr Code ist also derselbe wie bei jedem anderen
Abhängigkeit, aber die DI stellt sicher, dass dass Sie immer die gleiche Instanz erhalten immer dieselbe Instanz
Ich verwende einige Strukturkartenkonfigurationen:
ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
//the following injects any property that has a type
//that implements IController. (overcomes a regular asp.net limitation with DI)
SetAllProperties(
p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
);