Unity依赖关系通过web.config注入WCF服务

时间:2010-01-14 18:24:34

标签: .net wcf dependency-injection web-config unity-container

我有一个项目,我正在尝试使用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"端点提取。

关于如何实现这一目标的任何想法?

2 个答案:

答案 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的文档将描述如何使用此工具包实现您的目标。