我可以做这样的事情:
container.Register(AllTypes.FromAssemblyNamed("AssemblyName"));
我可以使用配置文件“Windsor.Config”???
做同样的事情答案 0 :(得分:18)
回应你的评论。
还有第三种方式(在Windsor 2.5中,目前处于测试阶段2 - 预计很快就会发布)。
您可以让每个模块都引用Windsor,每个模块都有自己的一组Installers.
您可以使用新的目录扫描功能来安装所有这些程序集中的组件:
// In your root assembly
var container = new WindsorContainer();
container.Install(
FromAssembly.This(),
FromAssembly.InDirectory(new AssemblyFilter("Modules")),
Configuration.FromAppConfig()
)
此外,如果您的组件具有相同的结构,您还可以在单个安装程序中注册多个组件中的组件。 See more here.
container.Register(
AllTypes.FromAssemblyInDirectory(new AssemblyFilter("Modules"))
.Where(t=>t.Namespace.EndsWith(".Services"))
.WithService.DefaultInterface()
);
答案 1 :(得分:1)
我很确定只有使用流畅的配置API才能为您的应用程序设置约定,以便在创建新组件时不需要单独注册它们,如示例所示。
答案 2 :(得分:1)
你可以写一个简单的设施,例如:
<强> AllTypesConfig.xml 强>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<facilities>
<facility id="alltypes">
<assemblies>
<item>Castle.Core</item>
</assemblies>
</facility>
</facilities>
</configuration>
<强>码强>
public class AllTypesFacility : AbstractFacility {
protected override void Init() {
var asmList = FacilityConfig.Children["assemblies"].Children;
foreach (var asm in asmList)
Kernel.Register(AllTypes.FromAssemblyNamed(asm.Value).Pick());
}
}
var container = new WindsorContainer(@"..\..\AllTypesConfig.xml");
container.AddFacility("alltypes", new AllTypesFacility());
container.Resolve<NullLogger>();
如果您需要更多的灵活性,那么用XML表示流畅的配置将变得越来越难。