繁体   English   中英

autofac wcf客户端配置

[英]autofac wcf client configuration

我创建了一个MVC应用程序,它将在WCF服务上调用方法。 我已将客户端应用程序配置为使用autofac,autofac.integration.mvc和autofac.integration.wcf。 我可以使用以下autofac注册代码进行操作:

var builder = new ContainerBuilder();
builder
  .Register(c => new ChannelFactory<IUserService>())
  .SingleInstance();

builder
  .Register(c => new ChannelFactory<IUserService>(
    new BasicHttpBinding(),
    new EndpointAddress(@"http://localhost:36763/UserService.svc")))
  .SingleInstance();

builder
  .Register(c => c.Resolve<ChannelFactory<IUserService>>().CreateChannel())
  .As<IUserService>()
  .UseWcfSafeRelease();

但我希望能够避免对EndPoint地址进行硬编码。 有没有一种方法可以不对端点地址进行硬编码?

更新。 我尝试了下面列出的代码,而无需对端点地址进行硬编码。 但是它引入了对UserServiceClient的依赖。

        var builder = new ContainerBuilder();

        string endpointAddress;
        using (var userServiceClientProxy = new UserServiceClient())
        {
            endpointAddress = userServiceClientProxy.Endpoint.Address.Uri.OriginalString;
        }

        builder
            .Register(c => new ChannelFactory<IUserService>(
                new BasicHttpBinding(),
                new EndpointAddress(endpointAddress)))
            .SingleInstance();

        builder
            .Register(c => c.Resolve<ChannelFactory<IUserService>>().CreateChannel())
            .As<IUserService>()
            .UseWcfSafeRelease();

        builder.Register(l => LogManager.GetLogger(nameof(WcfClient2))).As<ILog>()
            .SingleInstance();

        builder.RegisterControllers(Assembly.GetAssembly(typeof(HomeController)));

        var container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

这就是制作配置文件(以及额外的配置转换)的目的! 大多数CI服务器和部署平台甚至都具有重写配置值的机制,以保护您的开发环境不受生产影响。 这是一个很好的实践,没有更好的方法,尤其是考虑到除了您之外的其他人最终可能会在自己正在构建的东西上工作,他们希望看到合适的东西!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM