mvc - 重用服务行为

时间:2014-04-15 13:45:31

标签: c# asp.net-mvc-4 architecture dependency-injection

我一直在研究MVC-EF应用程序。我们使用DI容器将依赖项注入到控制器,服务和存储库中,即跨UI-Services-DataAccess层。

我的问题是关于服务中的DI。我最近感到困惑的一件事是因为需要使用在另一个服务中的一个服务中实现的行为(也就是方法)。

据我所知,一项服务不应该依赖另一项服务,因为这最终会导致更接近循环依赖,从而导致DI容器出现问题。

所以我的问题是,我应该如何解决这个问题?

我是否应该在第二个服务中实现所需的行为(作为其自身方法的一部分),或者我可以以某种方式从已经实现的第一个服务中重用它?

DI容器可以帮助我吗?

或者说,出路是将服务中实现的行为外包到一个单独的业务逻辑层,所以每个服务都可以使用它吗?顺便说一句,我们目前没有单独的BLL。

2 个答案:

答案 0 :(得分:1)

  

据我所知,一项服务不应该依赖另一项服务,因为这最终会导致更接近循环依赖,从而导致DI容器出现问题。

这不是相当是真的。通常,您的对象相互引用,形成图形。当我们讨论依赖注入时,我们通常将其称为依赖关系图

只要此图表为Directed Acyclic Graph,一切都很好。这里的关键字是非循环,但它并不排除重用。您可以使用多个服务来使用另一个服务的单个实例;这只意味着该服务共享

依赖关系图可以根据需要浅或深,只要它们是非循环的,您就可以compose dependency graphs with confidence

答案 1 :(得分:0)

通常答案是,"它取决于"但是根据你所说的关于需要一些行为/方法可用于多种服务的内容,我认为你提到的最后一种方法最有意义。

为"支持"创建一个独立的班级。函数在很多场景中都很有用,特别是如果你有一些用于多个服务的方法。 DI应该能够帮助您提供"支持"他们的家属。