我目前正在尝试构建一个小型App-Server,它将托管多个WCF服务。这些服务(以及它们的依赖性)当然应该由DI / IoC容器(当前是LightCore)实例化,但由于我通过CommonServiceLocator使用它,因此应该很容易交换。 不幸的是我偶然发现了一个问题。显然,我必须创建ServiceHost实例来托管提到的WCF服务。我已经构建了一个自定义的InstanceProvider和ServiceBehavior来处理服务的所有依赖关系,但ServiceHost的构造函数需要服务的服务类型来托管。在我的程序中,我只知道接口类型,因为只有DI容器知道当前正在使用哪个Service实现。
一种廉价的方法是通过Service Locator创建服务类型的“虚拟”实例,并为ServiceHost构造函数提供myDummyInstance.GetType()的输出,但这只会伤害到无用的实例化和服务的使用定位器而不是DI ...必须有更好的方法。
任何想法? :)
答案 0 :(得分:0)
有多种方法可以做到这一点。
ServiceLocator.Resolve<IContract>().GetType()
来解析服务契约的类型。它很丑,但它比创建虚拟实现要干净得多。此外,您永远不知道传递的类型是否未用于基础结构中的其他内容,因此传递虚拟类型可能很危险。