2010-01-14 21 views
3

我有一个项目,我正在尝试使用DI。我正在使用Unity,并且对于普通程序集和注入来说,事情似乎很有效。通过web.config统一依赖注入WCF服务

我想进一步打破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”在那里你将指定接口别名和以前d类的别名efined。

<type type="IMyService" mapTo="MyService"> 
<lifetime type="singleton"/> 
</type> 

由于WCF服务代理是在运行时动态创建的我没有这个参考“的MyService”类,而不是它需要从"BasicHttpBinding_IMyService"端点服务拉动。

关于如何完成这一任何想法?

回答

2

我从配置文件中看到这个工作的唯一方法是创建一个实现IMyService的MyService类 - 并在后台创建自己的Channel(使用ChannelFactory代码片段),并充当代理。

的而是说,为什么不就叫

RegisterInstance<IMyService>(myServiceChannelInstance) 

您的团结容器上,并通过在已创建的MyService通道实例?

+0

+1你刚刚描述的是一个抽象工厂 - 它是常见DI挑战的标准解决方案之一。 – 2010-01-15 09:23:06

+0

@Bryan:谢谢我意识到我可以在运行时使用该实例来完成此任务,但我试图坚持使用web.config来完成所有任务。 我想我最终会做的是在我的web.config中将自定义部分映射到接口的服务端点,然后在运行时循环这些部分。这样它就不必嵌入我的应用程序中。我将暂时打开此文件,以查看是否有人可以使用本机Unity配置部分进行此操作。 – Jay 2010-01-15 19:37:34

1

我写了一组去年的Unity扩展,实现了这一点。你可以从http://neovolve.codeplex.com/releases/view/19004下载我的工具包,它有这种支持。

查看该工具包的chm文件。 Neovolve.Toolkit.Unity.ProxyParameterValueElement的文档将描述如何用这个工具包实现你想要的。