我在我的解决方案中使用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));
}
然而,这导致了我的主项目中的依赖项被注册两次的问题 - 一次在正常初始化期间,然后再次从编译的程序集中注册。
有没有办法更改过滤器,以便它将获取除当前项目组件之外的所有组件?我一直在寻找,但找不到任何正确使用组装过滤器的正确例子。
答案 0 :(得分:2)
您可以添加其他过滤器。
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%正确,但它应该说明如何做到这一点。
答案 1 :(得分:2)
您可以按名称过滤程序集:
AssemblyFilter filter =
new AssemblyFilter(HttpRuntime.BinDirectory, "Toolbox.*.dll")
.FilterByName(an => !an.Name.StartsWith("Toolbox.API");