2016-04-11 6 views
1

У меня есть несколько сборок в моем приложении, некоторые из которых содержат инсталляторы. Тем не менее, мне нужно убедиться, что установщики в моей начальной записи запускаются в первую очередь. (. Мое приложение определяет некоторые декораторов, и установить порядок имеет значение)Сначала установка конкретного узла

Я попытался это:

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

но работают монтажник в моей сборке приложения в два раз, в результате чего регистрационного исключения.

Я могу смягчить это, создав поле в установщиках для отслеживания запуска этого установщика и возврата, если оно есть, но это кажется взломанным.

Есть ли способ, чтобы Windsor установил единую сборку, а затем остальные сборки в каталоге без дублирования?

Я думаю, что я хотел бы сделать что-то вроде этого

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

или

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

ответ

2

Как об использовании InstallerFactory для изменения порядка?

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

Тогда для регистрации:

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

Мне это нравится. Я попробую это завтра! – gregsdennis

+0

Очень приятное решение. Работает отлично! – gregsdennis