Ich habe eine neue .NET-Lösung mit Castle erstellt, die meine DI ausführt.
Es ist jetzt in dem Stadium, in dem ich die Reihenfolge, in der meine Installateure laufen, kontrollieren möchte. Ich habe einzelne Klassen erstellt, die IWindsorInstaller für meine Kerntypen implementieren - zB IRepository, IMapper und IService, um nur einige zu nennen.
Ich sehe, dass es vorgeschlagen wurde, dass ich meine eigene InstallerFactory in dieser Klasse implementiere.
Dann benutze diese neue Fabrik in meinem Anruf:
%Vor%Meine Frage - beim Überschreiben der Speichermethode - was ist der beste Weg, um die Reihenfolge meiner Installer zu erzwingen.
Ich weiß, dass es bereits gelöst ist, aber ich konnte kein Beispiel finden, wie man die InstallerFactory tatsächlich implementiert, also ist hier eine Lösung, wenn jemand dafür googlen wird.
Verwendung:
%Vor% Fügen Sie einfach das Attribut " InstallerPriority
" mit Priorität zu Ihren "install-order-sensitive" -Klassen hinzu. Installateure werden nach aufsteigender Sortierung sortiert. Installateure ohne Priorität werden standardmäßig auf 100 gesetzt.
So implementieren Sie:
%Vor%Beim Starten der Anwendung global.asax etc:
%Vor%Sie können Ihre Installationsprogramme in der Reihenfolge aufrufen, in der sie in Global.asax.cs oder z. in einer Bootstrapper-Klasse, die von Global.asax.cs aufgerufen wird.
%Vor% Sie werden in dieser Reihenfolge instanziiert, und Sie können einen Haltepunkt nachher hinzufügen und den Container für "Potentially misconfigured components"
überprüfen.
Wenn es welche gibt, überprüfen Sie ihre Status
- & gt; details
, wenn nicht, ist es die richtige Reihenfolge.
Diese Lösung ist schnell und einfach, die Dokumentation erwähnt die Verwendung einer InstallerFactory-Klasse für eine bessere Kontrolle über Ihre Installer. Wenn Sie also eine Menge Installer haben, kann die andere Lösung besser passen. (Die Verwendung von Code als Konvention sollte nicht viele Installer erfordern.)
Am Ende musste ich InstallerFactory
verwenden und die Bestellungsregeln wie zuvor vorgeschlagen implementieren, indem ich die IEnumerable<Type>
mit meiner spezifischen Bestellung zurückgab
Tags und Links dependency-injection c#-4.0 inversion-of-control castle-windsor