Ein Teil dieser Frage wurde bereits hier gestellt: structuremap Property Injection , aber die Antwort wurde nie gegeben.
Mit StructureMap ist es möglich, Property Injection so zu machen, dass
%Vor%wird richtig eingespritzt? Ich bin ein
StructureMap unterstützt Setter / Eigenschaft-Injektion . So könnten Sie Folgendes tun:
%Vor%und dann:
%Vor%oder wenn Sie die Idee nicht mögen, Ihre Controller mit StructureMap-spezifischen Attributen zu überladen, könnten Sie dies wie folgt konfigurieren:
%Vor% Beachten Sie auch, dass die Eigenschafteninjektion in Szenarien geeignet ist, in denen das Vorhandensein dieser Eigenschaft für die korrekte Funktionsweise des Controllers nicht zwingend erforderlich ist. Denken Sie zum Beispiel an einen Logger. Wenn der Consumer des Controllers keine spezifische Implementierung eines Loggers in die Eigenschaft einfügt, funktioniert der Controller immer noch, es wird nur protokolliert. In Ihrem Fall verwenden Sie einen Service und ich würde die Konstruktorinjektion verwenden, wenn Ihre Controller-Aktionen von diesem Service abhängig sind. Die Frage, die Sie sich stellen sollten, lautet also: Wird mein Controller abstürzen, wenn ich seine Aktion anrufe, wenn diese Eigenschaft null
ist? Wenn die Antwort auf diese Frage ja lautet, würde ich die Konstruktorinjektion empfehlen. Wenn Sie eine Konstruktorinjektion verwenden, erzwingen Sie außerdem, dass der Consumer dieses Controllers eine Implementierung angibt, da er keine Instanz des Controllers abrufen kann, ohne einen richtigen Dienst im Konstruktor übergeben zu müssen.
Um Abhängigkeiten für alle Eigenschaften eines bestimmten Typs einzufügen, verwenden Sie die SetAllProperties-Methode als Teil der Initialisierung Ihrer ObjectFactory:
%Vor%Es ist auch möglich, Richtlinien für die Setter-Injektion zu definieren, siehe diesen Beitrag .
Tags und Links asp.net-mvc-3 structuremap