我想在Castle Windsor使用流畅的界面。因为在.NET 2.0的“发布”二进制文件中没有这个,我从trunk编译,据报道它相当稳定。我编译只是:
这应该是我需要它的所有必要条件,但事情并没有按预期工作。我有一个汇编集合,我迭代并尝试使用以下代码加载每个程序集中包含的所有类型:
var container= new WindsorContainer();
foreach (var assembly in _assemblies)
{
container.Register(AllTypes.FromAssembly(assembly));
}
我使用调试器逐步完成了代码。 _assemblies
中有2个程序集。每个组件都有许多类型。循环迭代两次没有错误但是当它完成时container
仍然是空的。
更新: 一点澄清。最新的二进制文件确实具有流畅的界面,但它们的目标是.NET 3.5框架。我正在使用.NET 2.0。支持.NET 2.0的最新二进制版本是RC3。
答案 0 :(得分:4)
Register(AllTypes
...语法只是一个开始 - 你必须告诉温莎你要注册的是什么。
例如,获取所有控制器:
container.Register(AllTypes
.FromAssemblyContaining(representativeControllerType)
.BasedOn<Controller>()
.Configure(reg => reg
.LifeStyle.PerWebRequest));
这是另一个通过遵循约定注册的示例,即所有名称以“服务”结尾的类都应该注册:
container.Register(AllTypes
.FromAssemblyContaining<ConfigurationService>()
.Where(t => t.Name.EndsWith("Service", StringComparison.Ordinal))
.WithService.FirstInterface()
.Configure(reg => reg.LifeStyle.PerWebRequest));
如果您真的想要注册所有类型,您可以编写一个始终返回true的Where子句。
默认情况下,Windsor doesn't auto-resolve concrete types。
有关流畅注册API read the documentation的更多信息。