2013-04-26 9 views
5

Ho questo codice dal vecchio castelloSostituire obsoleto classe ALLTYPES nel Castello di Windsor

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

quando aggiorno a castello 3.2 ottengo questo errore:

Castle.MicroKernel.Registration.AllTypes' is obsolete

E questo errore per o.LifeStyle .PerWebRequest:

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

come posso risolvere questo problema?

risposta

8

Come ha detto @charleh, AllTypes è stato sostituito con Classes quindi risolvere questo problema è una semplice ricerca e sostituzione.

In realtà se si guarda al compilatore avvertendo si dovrebbe dire:

'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.

La ragione di questo cambiamento è che AllTypes era una bugia - è stato solo la corrispondenza di cemento (non abstract) le classi, così Classes è un nome molto migliore che ti dice meglio cosa fa veramente.

Per quanto riguarda l'altro problema, cambiando la chiamata proprietà per una chiamata di metodo lo risolverà:

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

O più semplice ancora, saltando i Configure:

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

Pochi sanno, ma Windsor realtà viene fornito con il file BreakingChanges.txt che descrive le modifiche e le modalità di aggiornamento.

1

Il primo problema è che AllTypes è equivalente a Classes (in realtà ho imparato questo questa mattina!)

Così, invece di

IoC.Container.Register(AllTypes.etc) 

Usa

IoC.Container.Register(Classes.etc) 

Non sono sicuro circa l'altra ma un po 'di ricerca sembra suggerire che gli stili di vita siano inseribili in 3.2, potresti perdere un riferimento

Edit:

Ah: Sembra che tu hai fatto riferimento la build client di Castle.Windsor dll - c'è un altro accumulo contro il profilo .NET completo che contiene il tipo di cui avete bisogno - controllare i vostri riferimenti

PerWebRequest Lifestyle missing in Castle Windsor 3.2

Problemi correlati