我目前正在尝试构建一个小型 App-Server 来托管多个 WCF 服务。这些服务(当然还有它们的依赖项)应该由 DI/IoC 容器(目前是 LightCore,但由于我通过 CommonServiceLocator 使用它,应该很容易交换)来实例化。不幸的是,我偶然发现了一个问题。显然我必须创建 ServiceHost 实例来托管提到的 WCF 服务。我已经构建了一个自定义的 InstanceProvider 和 ServiceBehavior 来处理服务的所有依赖项,但是 ServiceHost 的构造函数需要服务的服务类型来托管。此时在我的程序中,我只知道接口类型,因为只有 DI 容器知道当前正在使用哪个服务实现。
一种廉价的方法是通过 Service Locator 创建服务类型的“虚拟”实例,并为 ServiceHost 构造函数提供 myDummyInstance.GetType() 的输出,但这只会伤害到服务定位器的无用实例化和使用,而不是DI ...必须有更好的方法。
有什么想法吗?:)