Как я могу зарегистрировать все свои услуги в замке Виндзор wcf - PullRequest
3 голосов
/ 13 декабря 2011

Обычно я могу зарегистрировать один сервис, подобный этому.

Container.Register(Component.For<IMyService>()
                       .AsWcfClient(new DefaultClientModel() { 
                            Endpoint = WcfEndpoint
                                   .BoundTo(new NetNamedPipeBinding())
                                   .At("net.pipe://localhost/MyService") })
                       .LifeStyle.PerWebRequest);

Но я не мог понять, как зарегистрировать все мои сервисы с похожей конфигурацией.

вещь, которую я надеялся запустить, это ...

Container.Register(
    AllTypes.FromAssemblyNamed("My.Server.MyContracts")
        .Pick().If(x => x.Name.EndsWith("Service"))
        .Configure(configurer => configurer.Named(configurer.Implementation.Name)
                .AsWcfClient(new DefaultClientModel
                {
                    Endpoint = WcfEndpoint.BoundTo(new NetNamedPipeBinding())
                    .At(string.Format("net.pipe://localhost/{0}", configurer.Named(configurer.Implementation.Name)).Substring(1))
                }))
            .LifestylePerWebRequest()
        );

Как я могу зарегистрировать все сервисы как wcf клиент?

1 Ответ

4 голосов
/ 10 января 2012

Используя Windsor 3.0, вам просто нужно использовать Типы вместо AllTypes , чтобы он регистрировал интерфейс службы и генерировал для вас динамический прокси на стороне клиента, например:

Container
    .Register(
        Types
            .FromAssemblyNamed("My.Server.MyContracts")
            .Pick()
            .If(x => x.Name.EndsWith("Service"))
            .Configure(
                configurer => configurer.Named(configurer.Implementation.Name)
                                  .AsWcfClient(new DefaultClientModel
                                                   {
                                                       Endpoint = WcfEndpoint
                                                           .BoundTo(new NetNamedPipeBinding())
                                                           .At(string.Format(
                                                                       "net.pipe://localhost/{0}",
                                                                       configurer.Name.Substring(1)))
                                                   }))
            .LifestylePerWebRequest());
...