首先安装特定组件

Installing a particular assembly first

我的应用程序中有多个程序集,其中一些包含安装程序。但是,我需要确保我的入口程序集中的安装程序首先是 运行。 (我的应用程序定义了一些装饰器,安装顺序很重要。)

我试过这个:

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

但是 运行我的应用程序集中的安装程序两次,导致注册异常。

我可以通过在安装程序中创建一个字段来跟踪该安装程序是否具有 运行 和 return(如果有)来缓解这种情况,但这似乎很老套。

是否有正确的方法让 Windsor 安装单个程序集,然后将其余程序集安装在一个目录中而不重复?

我想我想做的是这样的事情

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

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

使用 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()));