как разрешить прокси-класс в замке Виндзор

У меня есть служба WCF, которую я пытаюсь разрешить с помощью Castle Windsor. Раньше регистрация выглядела так:

container.Register(Component.For<IBatchDataService>()
.AsWcfClient(WCFEndpoint
.FromConfiguration("Internal.IBatchDataService"))
.LifestyeTransient())

Теперь я создал прокси, который живет в процессе. Он предоставляет тот же интерфейс (IBatchDataService) и принимает ссылку на службу WCF в качестве аргумента конструктора. Как мне настроить это в Виндзоре, чтобы любые другие классы были разрешены для использования прокси-класса, но прокси-класс разрешался в службу WCF. У меня сейчас вот такое:

container.Register(Component.For<IBatchDataService>()
.ImplementedBy<BatchDataServiceClient>());

который должен разрешить новый прокси-класс.


person Jeff Hornby    schedule 20.03.2013    source источник


Ответы (2)


Попробуй это:

container.Register(
    Component.For<IBatchDataService>().AsWcfClient(WCFEndpoint.FromConfiguration("Internal.IBatchDataService")).LifestyeTransient().Named("wcfBatchDataService"),
    Component.For<IBatchDataService>().ImplementedBy<BatchDataServiceClient>().AsDefault().DependsOn(
        Dependency.OnComponent("constructorParameterName", "wcfBatchDataService")
)

Где constructorParameterName - это имя параметра IBatchDataService в вашем конструкторе. Я не запускал его в компиляторе, поэтому дайте мне знать, работает ли это для вас.

С уважением, Марвейн.

person Marwijn    schedule 21.03.2013

Это просто паттерн-декоратор. Виндзор поддерживает it OOTB:

container.Register(
    Component.For<IBatchDataService>().
        ImplementedBy<BatchDataServiceClient>(),
    Component.For<IBatchDataService().
        AsWcfClient(WCFEndpoint.FromConfiguration("Internal.IBatchDataService")).
        LifestyleTransient());
person Aleš Roubíček    schedule 21.03.2013