Windsor Fluent Registration - 所有类型的装配

时间:2009-12-28 14:19:53

标签: castle-windsor registration fluent

我想在Castle Windsor使用流畅的界面。因为在.NET 2.0的“发布”二进制文件中没有这个,我从trunk编译,据报道它相当稳定。我编译只是:

  • Castle.Core.dll
  • Castle.DynamicProxy.dll
  • Castle.MicroKernel.dll
  • Castle.Windsor.dll

这应该是我需要它的所有必要条件,但事情并没有按预期工作。我有一个汇编集合,我迭代并尝试使用以下代码加载每个程序集中包含的所有类型:

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。

1 个答案:

答案 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的更多信息。