【问题标题】:Windsor Fluent Registration - All types in an assemblyWindsor Fluent Registration - 装配体中的所有类型
【发布时间】:2009-12-28 14:19:52
【问题描述】:

我想在温莎城堡中使用流畅的界面。由于这在 .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。

【问题讨论】:

标签: castle-windsor registration fluent


【解决方案1】:

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

例如获取所有Controllers:

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 doesn't auto-resolve concrete types

更多关于流畅注册APIread the documentation的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多