0

我正在开发具有许多自托管 WCF 服务的 Windows 服务。我将 Autofac 用于 DI/IoC。

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

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

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

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

任何输入表示赞赏。

4

1 回答 1

1

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

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

  host.AddDependencyInjectionBehavior(t, container);
}
于 2013-05-25T21:18:22.460 回答