Cómo usar Castle.Windsor en un ensamblaje cargado usando la reflexión
Digamos que tengo una biblioteca Lib.dll, que utiliza Castle.Windsor para inicializar sus servicios.
Tengo una aplicación principal App.exe, que carga Lib.dll en tiempo de ejecución usando la reflexión. App.exe no conoce la ubicación de Lib.dll de antemano, solo se conoce en tiempo de ejecución.
En este caso, cuando App.exe carga Lib.dll y Lib.dll inicializa sus servicios, se emite una excepción System.TypeInitializationException, porque Castle.Windsor no puede encontrar el tipo de servicio.
Castle.MicroKernel.SubSystems.Conversion.ConverterException: Could not convert from 'Lib.TheServiceClass' to System.Type - Maybe type could not be found
at Castle.MicroKernel.SubSystems.Conversion.TypeNameConverter.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\TypeNameConverter.cs:line 91
at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion(String value, Type targetType) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 134
at Castle.MicroKernel.SubSystems.Conversion.DefaultConversionManager.PerformConversion[TTarget](String value) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\MicroKernel\SubSystems\Conversion\DefaultConversionManager.cs:line 162
at Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container, IConversionManager converter) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 196
at Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:line 52
at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 327
at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers) in e:\OSS.Code\Castle.Windsor\src\Castle.Windsor\Windsor\WindsorContainer.cs:line 674
Apparently Castle no puede encontrar mi clase de servicio porque está en Lib.dll que no se encuentra en el directorio de App.exe. Cuando copio Lib.dll al directorio App.exe, el problema desaparece, pero tener que copiar esto no es algo que queramos.
Entonces, ¿cómo puede mi código en Lib.dll decirle a Castle.Windsor que cargue la clase en la ubicación correcta? (en la ubicación de Lib.dll en lugar de en la ubicación de App.exe)