【问题标题】:Unity Dependency Injection of a WCF service via web.config通过 web.config 对 WCF 服务进行 Unity 依赖注入
【发布时间】:2010-01-14 18:24:33
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    但不是那样,为什么不直接打电话

    RegisterInstance<IMyService>(myServiceChannelInstance)
    

    在你的统一容器上并传入一个已经创建的 MyService 通道实例?

    【讨论】:

    • +1 你刚才描述的是一个抽象工厂——它是常见 DI 挑战的标准解决方案之一。
    • @Bryan:谢谢,我确实意识到我可以在运行时使用实例来执行此操作,但我试图坚持使用 web.config 进行所有操作。我想我最终要做的是在我的 web.config 中有一个自定义部分将服务端点映射到接口,然后在运行时循环这些部分。这样它就不必嵌入到我的应用程序中。我暂时将其保持打开状态,看看是否有人可以使用本机 Unity 配置部分来执行此操作。
    【解决方案2】:

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

    查看工具包的 chm 文件。 Neovolve.Toolkit.Unity.ProxyParameterValueElement 的文档将描述如何使用此工具包实现您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多