【问题标题】:SOA issue: WCF + dependency injectionSOA 问题:WCF + 依赖注入
【发布时间】:2012-06-09 10:22:08
【问题描述】:

我们有以下解决方案布局:

  • 数据访问
  • 业务逻辑
  • WCF 服务
  • MVC

我们选择了 WCF 服务层,因为将来会有其他应用程序使用相同的逻辑。这被认为是 SOA。

在 DA、BL 和 WCF 层之间,我倾向于使用依赖注入,因为我想对业务逻辑等进行单元测试。

但现在我的问题是:我是否也应该对 WCF 使用依赖注入?我的意思是,我应该从应用程序(消费者)通过 WCF 服务传递依赖关系吗?我个人觉得这很奇怪,因为在我看来它不再是 SOA 了吗?

谁能帮帮我?

【问题讨论】:

  • 看看this answer。它将为您提供一些关于如何编写完全不需要维护的 DI 友好的 WCF 服务的指导。

标签: c# asp.net-mvc wcf dependency-injection soa


【解决方案1】:

我是否应该通过 WCF 服务传递依赖项 来自应用程序?

我猜你的应用程序是指 WCF 服务的消费者,对吧?我相信从应用程序(MVC)中您正在通过代理与服务层交谈。您不应将依赖项从使用者应用程序注入到 WCF 服务中,并且您不能这样做。

但是您可以在 WCF 中使用依赖注入来注入数据/日志记录组件,以便通过创建自定义服务主机工厂在服务端本身进行更好的单元测试。

http://prideparrot.com/blog/archive/2012/2/dependency_injection_in_wcf_using_castle_windsor

【讨论】:

    【解决方案2】:

    可能会吹毛求疵,但使用服务并不一定意味着 SOA。

    既然如此,为什么需要从应用程序传递依赖项?您可以在主机上编写服务,如图所示here

    【讨论】:

    • 感谢您的回答。不过我还有一些问题。如果我使用您提供给我的链接中的解决方案,我还能使用“常规服务参考”方法来实现服务吗?
    • 是的,添加服务引用只创建一个代理客户端来与服务对话。代理不受服务注入的影响。
    【解决方案3】:

    如果您想对业务逻辑进行单元测试,您甚至可以为它们声明不同的端点并在您的单元测试中使用,这是依赖注入的替代方案。如果你真的想使用依赖注入,那么总是建议在服务级别而不是在客户端上进行,但如果你从客户端使用它仍然没有害处。 如果我愿意选择,那么我会在服务类中完成它,并且从客户端我可以获得一个参数,该参数将表明您是使用它进行单元测试还是应用程序调用了您的 WCF 服务。

    【讨论】:

    • 谢谢!因此,在服务级别上执行此操作,您的意思是我不应该通过 WCF 传递依赖项?
    • 是的,我不这样做的原因是,如果将来您想更改测试工具,那么您必须再次编写依赖注入代码,就像在服务器端一样,您可以保存那部分代码的时间。
    • 我不明白,即使你想要,你会如何在客户端上进行依赖注入?你会注入什么?此外,声明不同的端点并不能真正替代依赖注入,听起来更像是集成测试而不是单元测试。
    猜你喜欢
    • 2011-03-01
    • 2015-11-21
    • 2012-02-09
    • 2014-12-27
    • 2015-04-22
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多