2012-11-02 18 views
5

ruszam jakiś kod od Zamku 2.5.2 do 3.0, mam zestaw predefiniowanych rejestracji (w moim kodu startowego), który wykonuje pewne rzeczy w oparciu o konwencje, takie jak:Zamek Windsor 3,0 ComponentRegistration „ServiceType”

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); 
      } 
     }) 
); 

w Windsor 2.5.2 klasa ComponentRegistration ma właściwość ServiceType, w wersji 3.0 istnieje właściwość Services, ale jest "chroniona wewnętrznie".

Obsługa moich konwencji opiera się na fakcie, że muszę wiedzieć, jakie są usługi.

Jak mogę uzyskać te informacje?

.m

+0

obecnie częściowo rozwiązałem go, uzyskując dostęp do właściwości Services w ComponentRegistration za pomocą odbicia, ale jest to PITA. –

Odpowiedz

0

Nie .WithServiceSelect napełnić swoje potrzeby?

+0

W jaki sposób? problem dotyczy klasy ComponentRegistration, która nie ujawnia już informacji o ServiceType (lub usługach, które będą takie same). –

0

Tego dnia doświadczałem tego samego. Rozwiązałem to tak, jak poniżej, co sprawdza się, ponieważ postępujemy zgodnie z niektórymi konwencjami. Nie wydaje mi się, że jest to dobre rozwiązanie ...

.Configure(x => x.Named("I"+x.Implementation.Name)) 
Powiązane problemy