Конфигурация Castle Windsor на основе файла сборки или конфигурации - PullRequest
0 голосов
/ 07 июня 2009

Я использую Castle Windsor в своей собственной реализации шаблона Resolver. У меня есть две реализации службы MethodAService и MethodBService, которые обе реализуют IMethodService. Я использую «Convention Over Configuration» при начальной загрузке Windsor. Как я могу сказать Castle Windsor использовать всегда * MethodAService в одном случае (отладка, выпуск и т. Д.), А в другом - MethodBService. Спасибо за ваше время!

1 Ответ

2 голосов
/ 08 июня 2009

Вот один из способов сделать это, используя IHandlerSelector:

public class DebugHandlerSelector: IHandlerSelector {
    private readonly Type serviceType;
    private readonly Type debugImplementation;
    private readonly Type releaseImplementation;

    public DebugHandlerSelector(Type serviceType, Type debugImplementation, Type releaseImplementation) {
        this.serviceType = serviceType;
        this.debugImplementation = debugImplementation;
        this.releaseImplementation = releaseImplementation;
    }

    public bool HasOpinionAbout(string key, Type service) {
        return service == serviceType;
    }

    public IHandler SelectHandler(string key, Type service, IHandler[] handlers) {
        return handlers.First(h => h.ComponentModel.Implementation == 
#if DEBUG
            debugImplementation
#else
            releaseImplementation
#endif                    
            );
    }
}

Пример использования:

container.Kernel.AddHandlerSelector(new DebugHandlerSelector(typeof(IMethodService), typeof(MethodAService), typeof(MethodBService)));
...