【问题标题】:Self-hosted WCF: automatically create service hosts and enable dependency injection with Autofac自托管 WCF:使用 Autofac 自动创建服务主机并启用依赖注入
【发布时间】:2013-05-24 16:31:59
【问题描述】:

我正在开发一个包含许多自托管 WCF 服务的 Windows 服务。我正在使用 Autofac 进行 DI/IoC。

WCF 服务和端点在 app.config 中设置,通过enumerating the configured services,Windows 服务能够为每个配置的 WCF 服务自动创建和打开一个ServiceHost。

为了启用依赖注入,我为ServiceHost 的每个新实例添加了对AddDependencyInjectionBehavior (docs) 方法的调用,但该方法专门请求contractType,此时我只有服务实现类型。

我可以通过使用反射查找实现的接口来检索合同类型,但由于这是我第一个使用 Autofac 的项目,我想确保我不会把这一切都弄错。

是否有一个优雅的解决方案,这是否被认为是不好的做法,或者在这种情况下反射是唯一的方法?

感谢任何输入。

【问题讨论】:

    标签: .net wcf windows-services autofac self-hosting


    【解决方案1】:

    您可以尝试枚举您的 ServiceHost 的所有端点,并从中提取 ContractType。

    ServiceHost host = ...
    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
      var contract = endpoint.Contract;
      Type t = contract.ContractType;
    
      host.AddDependencyInjectionBehavior(t, container);
    }
    

    【讨论】:

    • 您实际上是否在多个端点上使用过这段代码?它对我来说失败了,因为AddDependencyInjectionBehavior 扩展方法解析为将AutofacDependencyInjectionServiceBehavior 添加到ServiceHost 的ServiceDescription.Behaviors 属性中,并且该集合不允许 允许重复(即使属性不同,这是这里的意图)。请参阅How to register two WCF service contracts with autofac 详细了解我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多