【问题标题】:Castle Windsor Multiple Instances using DependsCastle Windsor 多个实例使用 Depends
【发布时间】:2018-03-06 19:46:39
【问题描述】:

我需要有两个相同 Web 服务的实例,唯一的区别是 url。我似乎找不到关于如何根据构造函数中的参数名称来区分它的文档。这可能吗?我正在尝试使用 .DependsOn,但是当 Controller 构造函数实例化时,我似乎无法让它工作。

Controller.cs 构造函数:

        private Service.IPlanService PlanServiceProd;
    private Service.IPlanService PlanServiceDev;

    public BackcheckController(Service.IPlanService PlanServiceProd, Service.IPlanService PlanServiceDev)
    {
        this.PlanServiceProd = PlanServiceProd;
        this.PlanServiceDev = PlanServiceDev;
    }

Global.asax.cs 代码:

       WindsorContainer.Register(Component.For<Service.IPlanService>()
            .AsWcfClient()
            .Named("PlanServiceDev")
            .LifestyleTransient()
            .DependsOn(Dependency.OnValue("PlanServiceDev", "PlanServiceDev"))
            .DependsOn((k, d) =>
                d["EndPoint"] = WcfEndpoint.BoundTo(new WebHttpBinding(WebHttpSecurityMode.Transport) { MaxReceivedMessageSize = 2147483647 })
                                                  .At(new Uri(ClientAccountsUriDev, "plans"))
                                                  .AddExtensions(new WebHttpBehavior())
                                                  .AddExtensions(new ClientCredentialsEndPointBehaviour(ClientId, ClientSecret, ClientAccountsAudience, Issuer))
            )
            .Interceptors(new Castle.Core.InterceptorReference(typeof(MyCacheInterceptor))).Anywhere
            );

        WindsorContainer.Register(Component.For<Service.IPlanService>()
            .AsWcfClient()
         .Named("PlanServiceProd")
         .LifestyleTransient()
            .DependsOn(Dependency.OnValue("PlanServiceProd", "PlanServiceProd"))
         .DependsOn((k, d) =>
             d["EndPoint"] = WcfEndpoint.BoundTo(new WebHttpBinding(WebHttpSecurityMode.Transport) { MaxReceivedMessageSize = 2147483647 })
                                               .At(new Uri(ClientAccountsUriProd, "plans"))
                                               .AddExtensions(new WebHttpBehavior())
                                               .AddExtensions(new ClientCredentialsEndPointBehaviour(ClientId, ClientSecret, ClientAccountsAudience, Issuer))
         )
         .Interceptors(new Castle.Core.InterceptorReference(typeof(MyCacheInterceptor))).Anywhere
         );

【问题讨论】:

    标签: c# .net asp.net-mvc wcf castle-windsor


    【解决方案1】:

    嗯,这就是我想出的技巧。有人给我奖励:)

                WindsorContainer.Register(Component.For<Service.IPlanService>()
                .AsWcfClient()
                .LifestyleTransient()
                .DependsOn((k, d) =>
                {
    
                    d["EndPoint"] = WcfEndpoint.BoundTo(new WebHttpBinding(WebHttpSecurityMode.Transport) { MaxReceivedMessageSize = 2147483647 })
                                                      .At(new Uri(ServiceCount % 2 == 0 ? ClientAccountsUriImpact : ClientAccountsUriProd, "plans"))
                                                      .AddExtensions(new WebHttpBehavior())
                                                      .AddExtensions(new ClientCredentialsEndPointBehaviour(ClientId, ClientSecret, ClientAccountsAudience, Issuer));
    
                    if (ServiceCount % 2 == 0)
                        ServiceCount = 1;
                    else
                        ServiceCount = 0;
    
                } )
                .Interceptors(new Castle.Core.InterceptorReference(typeof(MyCacheInterceptor))).Anywhere
                );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多