过滤命名空间中除当前程序集之外的所有程序集
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");
我在我的解决方案中使用 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");