2012-02-04 25 views
9

tengo en mi código global.axax:castillo de Windsor no puede encontrar instaladores en asambleas

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

Cuando elimino errores Global.asax, código FromAssembly.InDirectory(newAssemblyFilter(AppDomain.CurrentDomain.RelativeSearchPath)) encuentra toda mi proyecto de DLL (hay 7 DLL). 3 de ellos contiene la implementación de IWindsorInstaller interfaz, por ejemplo:

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

Pero cuando I se exponen los puntos de interrupción, que está a sólo 1 instalador llamado, 2 otro fue omitido. Es gracioso, pero tengo otro trabajando en el proyecto a partir de lo que he copiado el código.

Respuesta

14

Su clase de instalador debe ser pública. Su clase de instalador actual no tiene modificador de acceso, por lo tanto tiene el valor predeterminado internal - y es invisible para Windsor. Castle lo especifica aquí: http://stw.castleproject.org/Windsor.Installers.ashx.

+0

¡Oh Dios mío! Es un error tan estúpido :) ¡Muchas gracias! –

+4

Nos sucede a todos, todo el tiempo :) – Marijn

Cuestiones relacionadas