我一直在开发 MVC-EF 应用程序。我们使用 DI 容器将依赖项注入(inject) Controller 、服务和存储库,即跨 UI-Services-DataAccess 层。
我的问题是关于服务中的 DI。最近让我感到困惑的一件事是需要在另一个服务中使用在一个服务中实现的行为(也称为方法)。
据我所知,一个服务不应该依赖另一个服务,因为这最终会导致更接近循环依赖,从而导致 DI 容器出现问题。
所以我的问题是,我应该如何解决这个问题?
我应该在第二个服务中实现所需的行为(作为它自己的方法的一部分)还是我可以以某种方式从已经实现的第一个服务中重用它?
DI 容器可以在这方面帮助我吗?
或者出路是将服务中实现的行为外包到单独的业务逻辑层,以便每个服务都可以使用?顺便说一句,我们目前没有单独的 BLL。
最佳答案
As far as I know, one service should not take dependency upon another because that would finally be leading closer to circular dependency and hence causing issues for DI container down the line.
这不是完全是真的。通常,您的对象相互引用,形成一个图。当我们讨论依赖注入(inject)时,我们通常将其称为依赖图。
只要这张图是Directed Acyclic Graph , 一切都很好。这里的关键词是非循环,但不排除重用。您可以有多个服务使用另一个服务的单个实例;这仅仅意味着该服务是共享的。
依赖图可浅可深,只要它们是非循环的,您就可以compose dependency graphs with confidence .
关于c# - mvc - 重用服务行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085606/