2009-12-28 81 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的更多信息。