2012-02-04 12 views
9

Ho codice nel mio global.axax:Castello di Windsor non riesce a trovare gli installatori nelle assemblee

protected void Application_Start() 
{ 
    WindsorContainer = new WindsorContainer(); 
    WindsorContainer.Install(FromAssembly.InDirectory(new AssemblyFilter(AppDomain.CurrentDomain.RelativeSearchPath))); 
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(WindsorContainer.Kernel)); 
//... 
} 

Quando il debug global.asax, codice FromAssembly.InDirectory(newAssemblyFilter(AppDomain.CurrentDomain.RelativeSearchPath)) trova tutto il mio progetto di DLL (ci sono 7 dll). 3 di essi contiene attuazione IWindsorInstaller interfaccia, ad esempio:

class WindsorInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     var services = AllTypes.FromThisAssembly().Where(type => type.Name.EndsWith("Service")); 
     container.Register(services 
      .WithService.DefaultInterfaces() 
      .Configure(c => c.LifestyleTransient())); 
     container.Register(Component.For<ISession>().ImplementedBy<AspnetSession>(). 
      LifeStyle.Transient); 
     container.Register(Component.For<ICache>().ImplementedBy<AspnetCache>(). 
      LifeStyle.Transient); 
    } 
} 

Ma quando I definisce i punti di interruzione, è solo 1 installatore chiamato, 2 altro era saltato. È divertente, ma ho un altro che funziona con il progetto da quello che ho copiato il codice.

risposta

14

La classe di installazione deve essere pubblica. La tua attuale classe di installatore non ha modificatori di accesso, quindi il valore predefinito è internal ed è invisibile a Windsor. I documenti del castello lo specificano qui: http://stw.castleproject.org/Windsor.Installers.ashx.

+0

Oh mio dio! È uno sbaglio così stupido :) Grazie mille! –

+4

Succede a tutti noi, sempre :) – Marijn

Problemi correlati