过滤命名空间中除当前程序集之外的所有程序集

Filter all assemblies in namespace except for current one

我在我的解决方案中使用 IoC,它分为以下项目:

Toolbox.DAL
Toolbox.BL
Toolbox.EntityFramework
Toolbox.API(主要项目)

为了在我的主项目中注册组件,我使用了以下代码:

using (WindsorContainer container = new WindsorContainer())
{
    AssemblyFilter filter = new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll");
    IWindsorInstaller installer = FromAssembly.InDirectory(filter);

    return new CastleInitialiser(container.Install(installer));
}

然而,这导致了一个问题,即我的主项目中的依赖项被注册了两次——一次是在正常初始化期间,然后是从编译的程序集中。

是否有任何方法可以更改筛选器,使其选取除当前项目程序集之外的所有程序集?我一直在四处寻找,但找不到任何关于如何正确使用程序集过滤器的合适示例。

刚看了source code

您可以添加其他过滤器。

using (WindsorContainer container = new WindsorContainer())
{
    AssemblyFilter filter = new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll");

    //this
    filter = filter.FilterByName(name => !name.Name.Equals("Toolbox.API"));

    IWindsorInstaller installer = FromAssembly.InDirectory(filter);

    return new CastleInitialiser(container.Install(installer));
}

我的语法可能不是 100% 正确,但它应该可以说明您如何做到这一点。

您可以按名称过滤程序集:

AssemblyFilter filter = 
    new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll")
        .FilterByName(an => !an.Name.StartsWith("Toolbox.API");