2013-04-26 15 views
5

Mam ten kod ze starego zamkuzastąpienia przestarzałych klasę AllTypes w zamku Windsor

IoC.Container.Register( 
    AllTypes 
     .FromAssemblyNamed(a) 
     .Pick().WithService.FirstInterface() 
     .Configure(o => o.LifeStyle.PerWebRequest)); 

kiedy uaktualnienie do zamku 3.2 otrzymuję ten błąd:

Castle.MicroKernel.Registration.AllTypes' is obsolete

i ten błąd dla o.LifeStyle .PerWebRequest:

Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement

jak mogę rozwiązać ten problem?

Odpowiedz

8

Tak jak @charleh powiedział, AllTypes został zastąpiony przez Classes, więc naprawienie tego problemu jest prostym znalezieniem i zamianą.

Właściwie jeśli spojrzeć na kompilatora ostrzegawczy powinien powiedzieć:

'AllTypes' has been deprecated and will be removed in future releases. Use 'Classes' static class (if you want to just register concrete classes) or 'Types' static class (if you want to register interfaces or abstract classes too) instead. It exposes exactly the same methods.

Powodem tej zmiany było to, że AllTypes było kłamstwo - to było dopasowane tylko betonowe (non-streszczenie) zajęcia, więc Classes jest o wiele lepsza nazwa, która lepiej powie Ci, co naprawdę robi.

Co do drugiego problemu, zmieniając połączenie właściwości do wywołania metody będzie to naprawić:

Container.Register(
    Classes.FromAssemblyNamed(a) 
     .Pick().WithServiceFirstInterface() 
     .Configure(o => o.LifestylePerWebRequest())); 

Or prostsze jeszcze, omijając Configure:

Container.Register(
    Classes.FromAssemblyNamed(a) 
     .Pick().WithServiceFirstInterface() 
     .LifestylePerWebRequest()); 

Niewiele osób wie, ale Windsor rzeczywiście dostarczany z plikiem BreakingChanges.txt, który opisuje łamanie zmian i sposób aktualizacji.

1

Pierwszym problemem jest to, że AllTypes jest równoważna Classes (I rzeczywiście dowiedział się o tym dziś rano!)

więc zamiast

IoC.Container.Register(AllTypes.etc) 

Zastosowanie

IoC.Container.Register(Classes.etc) 

Nie jestem pewien co drugi ale szybkie szukanie wydaje się sugerować, że style życia można podłączyć w 3.2, może brakować odniesienia

Edit:

Ah: Wygląda jak masz odwołuje kompilacji kliencką dll Castle.Windsor - jest inny build przeciwko pełnego profilu .NET, która zawiera typ potrzeba - Sprawdź referencje

PerWebRequest Lifestyle missing in Castle Windsor 3.2

Powiązane problemy