c# - mvc - 重用服务行为

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

我一直在开发 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/

相关文章:

android - PlayStore - 以下 APK 或应用程序包可在 64 位设备上使用,但只有 native 32 位代码 : 1

c# - 使用反射动态地将对象添加到 Entity Framework

c# - 如何在 .net 中将 json 解析为 html

asp.net-mvc - 在 MVC4 中使用 JsonConvert.SerializeObject 清理输入?

c# - asp.net mvc 应用程序的 paypal 集成建议

html - Web 应用程序架构设计 - HTML/CSS/JS 前端 + REST 后端

c# - 获取 IQueryable<T>,其中 T 的任何字段包含给定字符串

c# - Xdocument - 删除除最后一个元素之外的重复元素 c#

c# - MVC4 WebAPI 找到多个与请求匹配的操作

asp.net - 确保成功的 ASP.NET 应用程序可伸缩性的关键因素是什么?