我有一个项目,我正在尝试使用DI。我正在使用Unity,这些东西似乎适用于正常的装配和注射。
我正在尝试进一步破坏与WCF服务的依赖关系。我想要注入的WCF服务是在运行时创建的,目前不使用DI,我不使用VS .net生成的代理:
MyService = new ChannelFactory<IMyService>("BasicHttpBinding_IMyService").CreateChannel();
以上的端点位于web.config中:
<endpoint address="http://localhost:35806/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyService"
contract="Interfaces.IMyService" name="BasicHttpBinding_IMyService" />
我试图找出如何通过web.config将此WCF服务映射到接口,以便我可以使用构造函数注入
在web.config中,使用“mapTo”进行常规映射,您可以在其中指定接口别名和先前定义的类的别名。
<type type="IMyService" mapTo="MyService">
<lifetime type="singleton"/>
</type>
由于WCF服务代理是在运行时动态创建的,因此我没有对“MyService”类的引用,而是需要从服务的"BasicHttpBinding_IMyService"
端点提取。
关于如何实现这一目标的任何想法?
答案 0 :(得分:2)
我从配置文件中看到这一点的唯一方法是创建一个实现IMyService的MyService类 - 在幕后它创建自己的Channel(使用ChannelFactory代码片段)并且基本上充当代理。
但不是那样,为什么不打电话
RegisterInstance<IMyService>(myServiceChannelInstance)
在您的Unity容器上并传入已创建的MyService频道实例?
答案 1 :(得分:1)
去年我写了一套Unity扩展来实现这一目标。您可以从http://neovolve.codeplex.com/releases/view/19004下载具有此支持的工具包。
查看工具包的chm文件。 Neovolve.Toolkit.Unity.ProxyParameterValueElement的文档将描述如何使用此工具包实现您的目标。