Сконфигурируйте различные реализации для разрешения на основе параметра Web.config в Castle Windsor - PullRequest
1 голос
/ 06 октября 2011

Мне нужно настроить различные реализации некоторого интерфейса и настроить его на основе параметра Web.config.Так что, имея интерфейс IExternalService, я бы хотел иметь TestExternalService и ExternalService.И у меня есть настройка приложения «TestMode» в Web.config.Как я могу зарегистрировать TestExternalService и ExternalService в Castle Windsor, чтобы, например, когда TestMode равнялся 0, то ExternalService разрешался, а когда TestMode равнялся 1, то TestExternalService разрешался.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Использовать селектор обработчика .

1 голос
/ 13 октября 2011

Я бы рекомендовал использовать один из двух подходов.Если у вас есть большое количество служб, которые необходимо изменить в зависимости от этого параметра, я бы реализовал две версии интерфейса IWindsorInstaller и загрузил правильную версию на основе параметра web.config.

var container = new WindsorContainer();
var testMode= WebConfigurationManager.AppSettings["Testmode"];

if(testMode == "1") {
    container.Install(new [] { new TestServiceInstaller() });
else
    container.Install(new [] { new ServiceInstaller() });    

Если выесть только одна или две службы, которые нужно изменить, вы можете написать один экземпляр IWindsorInstaller и поместить логику для регистрации компонента в установщик.

var testMode = WebConfigurationManager["TestMode"];

if(testMode == "1") {
    container.Register(Component.For<IExtenalService>().ImplementedBy<TestExternalService>())
}
else
{
    container.Register(Component.For<IExternalService>().ImplementedBy<ExternalService>();
...