我有一个MyApp解决方案。此解决方案具有服务项目和存储库(DAL)项目。应用程序模式是每个服务调用相应的存储库以进行数据访问。
Services项目有一个LoggingService,我想使用LoggingService从其中一个存储库记录一些信息。但是,我无法在存储库项目b / c中添加对Services项目的引用,这将导致循环依赖。
解决方法是让我直接调用LoggingRepository而不是调用服务。有没有更好的方法来处理这种循环依赖?
答案 0 :(得分:0)
当然,他们有很多方法来处理这种情况,首先我会为每个服务创建一个接口并将其放在单独的dll中,例如,您将有两个日志服务项目如下:
LoggingService 我也会为每一个boundedContext执行此操作,它代表一组处理我的域内单个方面的项目(例如学校应用程序中的学生操作和逻辑,搜索域驱动设计模式以获取更多信息)如下:
IStudentsDomain
让我们想象一下,我们在以下项目中有以下项目所示的其他存储库和有界上下文:
现在你只引用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;
}
}