如何处理这个循环依赖?

时间:2018-04-24 17:25:24

标签: c# .net architecture

我有一个MyApp解决方案。此解决方案具有服务项目和存储库(DAL)项目。应用程序模式是每个服务调用相应的存储库以进行数据访问。

Services项目有一个LoggingService,我想使用LoggingService从其中一个存储库记录一些信息。但是,我无法在存储库项目b / c中添加对Services项目的引用,这将导致循环依赖。

解决方法是让我直接调用LoggingRepository而不是调用服务。有没有更好的方法来处理这种循环依赖?

1 个答案:

答案 0 :(得分:0)

当然,他们有很多方法来处理这种情况,首先我会为每个服务创建一个接口并将其放在单独的dll中,例如,您将有两个日志服务项目如下:

  • ILoggingService
  • LoggingService 我也会为每一个boundedContext执行此操作,它代表一组处理我的域内单个方面的项目(例如学校应用程序中的学生操作和逻辑,搜索域驱动设计模式以获取更多信息)如下:

  • IStudentsDomain

  • StudentsDomain

让我们想象一下,我们在以下项目中有以下项目所示的其他存储库和有界上下文:

  • ITeachersDomain
  • TeachersDomain

现在你只引用StudentsDomain和TeachersDomain里面的ILoggingService(DAL实现或域层),并使用依赖注入(基于你的项目为asp.net mvc我会推荐Unity,在asp.net核心mvc里面DI已经存在开箱即用,最后你也可以在WPF中使用unity),以便用你的实现注册你的接口,然后在StudentsDomain和TeachersDomain的构造函数中请求它们如下:

public class TeachersDomain : ITeachersDomain
{
    public ILoggingService LoggingService { get; set; }
    public TeachersDomain(ILoggingService loggingService)
    {
        LoggingService = loggingService;
    }
}