Ich habe 4 Projekte:
Core (IServer):
DependencyResolver:
Infrastruktur (Service):
Konsole:
Anforderungen:
Ich versuche, StructureMap nur im DependencyResolver zu verwenden. Außerdem sollte die Konsolenanwendung nichts über Infrastuktur wissen.
Wenn ich in meiner Konsolenanwendung nicht auf StructureMap verweisen möchte, muss ich einen ServiceLocator erstellen.
Im DependencyResolver habe ich einen Bootstrapper, der für den Aufruf von StructureMap-Registry-Stuff (Register) verantwortlich ist
In meiner Konsolenanwendung möchte ich eine Instanz bekommen. Dafür muss ich auf StructureMap verweisen. Ein anderer Weg wäre, einen kleinen Wrapper um die Methoden von StructureMaps zu schreiben.
Gibt es einen anderen besseren Weg, die Konsole von StructureMap zu entkoppeln?
Während ich einen Grund sehe, IoC-Register zu trennen, zu lösen und von der Implementierung der Anwendung freizugeben, sehe ich keinen Grund, warum der IoC-Container nicht in der Konsolenanwendung (dem Kompositionswurzel) und der Anwendung sein sollte Implementierung stattdessen in einer anderen Assembly.
Auf diese Weise ist die Konsolenanwendung sehr einfach:
Mit SM sieht es ungefähr so aus:
%Vor%Für Dinge, die Sie beim Start nicht erstellen können, erstellen Sie eine Factory-Schnittstelle in Ihrer Anwendungsassembly:
%Vor%und implementieren Sie diese Schnittstelle in der Konsolenanwendung, indem Sie den Container injizieren und ihn zum Auflösen der Instanz verwenden. Ich denke, die SM-Implementierung sieht so aus:
%Vor%Andere IoC-Container verfügen sogar über die Funktionalität, diese Schnittstellenfactories automatisch zu implementieren.
Tags und Links c# dependency-injection console-application inversion-of-control