2012-11-02 90 views
5

我從城堡2.5.2移動一些代碼到3.0,我有一組預定義的註冊(在我的引導代碼),做基於公約,如一些東西:城堡溫莎3.0 ComponentRegistration「服務類型」

container.Register 
(
    AllTypes.FromAssemblyInDirectory(new AssemblyFilter(".")) 
     .IncludeNonPublicTypes() 
     .Where(t => conventions.IsViewModel(t) && !conventions.IsExcluded(t)) 
     .WithService.Select((type, baseTypes) => conventions.SelectViewModelContracts(type)) 
     .Configure(r => 
     { 
        r.Properties(PropertyFilter.IgnoreAll); 

      if(conventions.IsShellViewModel(r)) 
      { 
       r.LifeStyle.Is(LifestyleType.Singleton); 
      } 
      else 
      { 
       r.LifeStyle.Is(LifestyleType.Transient); 
      } 
     }) 
); 

在Windsor 2.5.2 ComponentRegistration類有一個ServiceType屬性,在3.0有一個Services屬性但是「內部保護」。

我的約定處理依賴於我需要知道哪些是服務的事實。

我怎樣才能得到這些信息?

.m

+0

目前我已部分解決它使用反射訪問ComponentRegistration上的服務屬性,但是PITA。 –

回答

0

不.WithService選擇是否滿足您的需求?

+0

以哪種方式?問題在於ComponentRegistration類不再公開關於ServiceType的信息(或者它將是相同的服務)。 –

0

今天我遇到了同樣的事情。解決它像下面,這是因爲我們遵循一些約定。它不覺得這是一個很好的解決方案,雖然...

.Configure(x => x.Named("I"+x.Implementation.Name)) 
.Configure(x => x.Named("I"+x.Implementation.Name))