Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SOA问题:WCF+;依赖注入_C#_Asp.net Mvc_Wcf_Dependency Injection_Soa - Fatal编程技术网

C# SOA问题:WCF+;依赖注入

C# SOA问题:WCF+;依赖注入,c#,asp.net-mvc,wcf,dependency-injection,soa,C#,Asp.net Mvc,Wcf,Dependency Injection,Soa,我们有以下解决方案布局: 数据访问 业务逻辑 WCF服务 MVC 我们选择使用WCF服务层,因为将来会有其他应用程序使用相同的逻辑。这被认为是SOA 在DA、BL和WCF层之间,我倾向于使用依赖注入,因为我想对业务逻辑进行单元测试 但现在我的问题是:我是否也应该对WCF使用依赖注入?我的意思是,我应该从应用程序(消费者)通过WCF服务传递依赖项吗?就我个人而言,我觉得这很奇怪,因为在我看来它不再是SOA了 有人能帮我吗?可能会吹毛求疵,但使用服务并不一定意味着SOA 既然这样,为什么需要从应

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

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

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

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


有人能帮我吗?

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


既然这样,为什么需要从应用程序传递依赖项呢?您可以在主机上组合服务,如图所示。

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


既然这样,为什么需要从应用程序传递依赖项呢?您可以在主机上组合服务,如图所示。

如果您想对业务逻辑进行单元测试,您甚至可以为它们声明不同的端点,然后在单元测试中使用,这是依赖项注入的替代方法。若你们真的想使用依赖注入,那个么最好是在服务级别上而不是在客户端上进行,但若你们从客户端使用它,那个么还是并没有坏处的。
如果让我选择的话,我会在服务类中完成这项工作,从客户端我可以得到一个参数,该参数将表明您是在使用它进行单元测试,还是应用程序调用了WCF服务。

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

我应该通过WCF服务传递依赖项吗 从应用程序中删除

我猜你指的是WCF服务的消费者,对吧?我相信从应用程序(MVC)来看,您是通过代理与服务层对话的。您不应该从使用者应用程序向WCF服务注入依赖项,您不能这样做

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

我应该通过WCF服务传递依赖项吗 从应用程序中删除

我猜你指的是WCF服务的消费者,对吧?我相信从应用程序(MVC)来看,您是通过代理与服务层对话的。您不应该从使用者应用程序向WCF服务注入依赖项,您不能这样做

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


谢谢您的回答。不过我还有一些问题。。如果我使用您给我的链接中的解决方案,我仍然可以使用“常规服务引用”方法来实现服务吗?是的,添加服务引用只会创建一个代理客户端来与服务对话。代理不受服务注入的影响。感谢您的回答。不过我还有一些问题。。如果我使用您给我的链接中的解决方案,我仍然可以使用“常规服务引用”方法来实现服务吗?是的,添加服务引用只会创建一个代理客户端来与服务对话。代理不受服务注入的影响。谢谢!所以,在服务级别上这样做,你的意思是我不应该通过WCF传递依赖项?是的,我不这样做的原因是,如果将来你想更改测试工具,那么你必须再次编写依赖项注入代码,就像在服务器端一样,这样你就可以为这部分代码节省时间。我不明白,即使你想,您将如何在客户机上进行依赖项注入?你会注射什么?此外,声明不同的端点并不是依赖注入的真正替代方法,它听起来更像是集成测试而不是单元测试。谢谢!所以,在服务级别上这样做,你的意思是我不应该通过WCF传递依赖项?是的,我不这样做的原因是,如果将来你想更改测试工具,那么你必须再次编写依赖项注入代码,就像在服务器端一样,这样你就可以为这部分代码节省时间。我不明白,即使你想,您将如何在客户机上进行依赖项注入?你会注射什么?此外,声明不同的端点并不是依赖注入的真正替代方法,它听起来更像是集成测试而不是单元测试。它将为您提供一些关于如何编写一个完全不需要维护的DI友好WCF服务的指导。它将为您提供一些关于如何编写一个完全不需要维护的DI友好WCF服务的指导。