2009-12-28 85 views
2

我想使用Castle Windsor中流畅的界面。因为这在我从trunk中编译的.NET 2.0的“release”二进制文件中是不可用的,因为它被报告相当稳定。我刚刚编译:Windsor Fluent注册 - 程序集中的所有类型

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

+0

Fluent API在二进制文件中可用。我正在使用它,我从来没有编译过温莎。 – 2009-12-28 14:26:01

+0

@Kenneth:参见http://using.castleproject.org/display/IoC/Fluent+Registration+API – 2009-12-28 15:34:30

回答

4

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

例如把所有控制器:

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