首页 文章

WCF构造函数服务类型通过DI

提问于
浏览 967
0

我目前正在尝试构建一个小型App-Server,它将托管多个WCF服务 . 这些服务(以及它们的依赖性)当然应该由DI / IoC容器(当前是LightCore)实例化,但由于我通过CommonServiceLocator使用它,因此应该很容易交换 . 不幸的是我偶然发现了一个问题 . 显然,我必须创建ServiceHost实例来托管提到的WCF服务 . 我已经构建了一个自定义的InstanceProvider和ServiceBehavior来处理服务的所有依赖关系,但ServiceHost的构造函数需要服务的服务类型来托管 . 在我的程序中,我只知道接口类型,因为只有DI容器知道当前正在使用哪个Service实现 .

一种廉价的方法是通过Service Locator创建服务类型的“虚拟”实例,并为ServiceHost构造函数提供myDummyInstance.GetType()的输出,但这只是伤害,无用的实例化和Service Locator的使用而不是DI ......必须有更好的方法 .

任何人的想法? :)

1 回答

  • 0

    有多种方法可以做到这一点 .

    • 我喜欢的方式非常简单 . 您不会解析您的服务 Contract 而是服务实现本身,因为这只是WCF所期望的 . 我使用的所有IoC容器都能够解析类型本身并填充其依赖项 .

    • 另一种方式是更多的黑客攻击 . 当您调用服务主机的构造函数时,您将通过调用解析服务 Contract 的类型,如 ServiceLocator.Resolve<IContract>().GetType() . 它很丑,但它比创建虚拟实现要干净得多 . 此外,您永远不知道传递的类型是否未用于基础结构中的其他内容,因此传递虚拟类型可能很危险 .

相关问题