2

我想在温莎城堡中使用流畅的界面。由于这在 .NET 2.0 的“发布”二进制文件中不可用,我从主干编译,据报道它相当稳定。我只是编译:

  • 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。

4

1 回答 1

4

... 语法只是开始——Register(AllTypes你必须告诉 Windsor 你想注册什么。

例如获取所有控制器:

container.Register(AllTypes
         .FromAssemblyContaining(representativeControllerType)
         .BasedOn<Controller>()
         .Configure(reg => reg
             .LifeStyle.PerWebRequest));

这是另一个注册的示例,它遵循所有名称以“Service”结尾的类都应注册的约定:

container.Register(AllTypes
        .FromAssemblyContaining<ConfigurationService>()
        .Where(t => t.Name.EndsWith("Service", StringComparison.Ordinal))
        .WithService.FirstInterface()
        .Configure(reg => reg.LifeStyle.PerWebRequest));

如果您真的想注册所有类型,您可以编写一个始终返回 true 的 Where 子句。

默认情况下,Windsor 不会自动解析具体类型

有关 fluent 注册 API的更多信息,请阅读文档

于 2009-12-28T14:33:16.770 回答