我的 .NET 5.0 C# 项目中的循环依赖 - 我该如何解决它?

Circular Dependency in my .NET 5.0 C# project - how can I solve it?

我有以下项目结构和以下命名空间:

DbContext 项目当前正在使用对 Shared 项目的项目引用,因为我们想通过解决方案范围内使用的 Logger 记录数据。

现在应该更改为记录器也应该写入一些数据库。对我来说,如果我尝试在 ProjectName.Shared.

中添加 ProjectName.DbContext 作为项目引用,它将成为循环项目依赖项

然后看起来像这样:

我正在考虑创建一个名为 ProjectName.Logging 的新子项目,但我看不出它如何解决我的循环依赖问题; ProjectName.Logging 需要 ProjectName.DbContext 反之亦然。

有人知道如何解决循环依赖吗?

四个选项:

  1. 合并 ProjectName.SharedProjectName.DbContext 程序集
  2. 查看其中一个是否可以声明一个接口 - 也许 ProjectName.DbContext 可以声明并接受一个 IDbLogger 接口,然后 实现 ProjectName.Shared 并传入,因此它可以在不了解详细信息的情况下进行记录
  3. 下方创建一个附加包,它具有日志抽象,ProjectName.SharedProjectName.DbContext都可以参考
  4. 与 3 相似,但使用 Microsoft.Extensions.Logging.Abstractions
  5. 中的预卷 ILogger[<T>]

技术上也可以创建一个真正的循环构建,但可怕复杂,非常 脆弱,你不应该将其视为绝对最后手段的黑客攻击)