我正在使用一系列自托管WCF服务的Windows服务。我正在使用Autofac进行DI / IoC。
WCF服务和端点在app.config中设置,并且enumerating the configured services,Windows服务能够为每个配置的WCF服务自动创建和打开ServiceHost
。
要启用依赖项注入,我为AddDependencyInjectionBehavior
的每个新实例添加了对ServiceHost
(docs)方法的调用,但该方法专门请求 contractType 在这一点上我只有服务实现类型。
我可以通过使用反射查找已实现的接口来检索合同类型,但由于这是我使用Autofac的第一个项目,我想确保我不会这样做。
对此有一个优雅的解决方案,这是否被认为是不好的做法,或者反思是这种情况下唯一的解决方法?
赞赏任何意见。
答案 0 :(得分:1)
您可以尝试枚举ServiceHost的所有端点,并从那里提取ContractType。
ServiceHost host = ...
foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
{
var contract = endpoint.Contract;
Type t = contract.ContractType;
host.AddDependencyInjectionBehavior(t, container);
}