2016-04-11 4 views
1

Ich habe mehrere Baugruppen in meiner Anwendung, von denen einige Installer enthalten. Ich muss jedoch sicherstellen, dass die Installationsprogramme in meiner Eingabeassembly zuerst ausgeführt werden. (. Meine Anwendung definiert einige Dekorateure, und um Fragen installieren)Eine bestimmte Baugruppe zuerst installieren

Ich habe versucht, dieses:

_container.Install(FromAssembly.Containing<MyApplication>()); 
_container.Install(FromAssembly.InDirectory(new AssemblyFilter(applicationDirectory))); 

aber das läuft die Installateure in meiner Anwendung Montage zweimal, eine Registrierungs Ausnahme verursacht.

Ich kann dies durch Erstellen eines Feldes in den Installern zu verfolgen, um zu verfolgen, ob das Installationsprogramm ausgeführt wurde, und zurück, wenn es hat, aber das scheint hacky.

Gibt es eine geeignete Möglichkeit, Windsor eine einzige Baugruppe installieren zu lassen, und dann den Rest der Baugruppen in einem Verzeichnis ohne Duplizierung?

Ich denke, was ich ist so etwas tun möchte

_container.Install(FromAssembly.InDirectory(new AssemblyFilter(applicationDirectory)) 
           .SkipAlreadyRegistered()); 

oder

_container.Install(FromAssembly.InDirectory(new AssemblyFilter(applicationDirectory)) 
           .Except(FromAssembly.Containing<MyApplication>())); 

Antwort

2

Wie wäre es mit InstallerFactory um die Reihenfolge zu ändern?

_container.Install(FromAssembly.InDirectory(new AssemblyFilter(applicationDirectory), new AppFirstFactory())); 
+0

ich das mag:

public class AppFirstFactory: InstallerFactory { public override IEnumerable<Type> Select(IEnumerable<Type> installerTypes) { return installerTypes.OrderBy(x => x.Assembly == GetType().Assembly ? 0 : 1); } } 

Dann zu registrieren. Ich werde es morgen versuchen! – gregsdennis

+0

Sehr schöne Lösung. Funktioniert perfekt! – gregsdennis