提问人:Jana Weschenfelder 提问时间:8/26/2021 最后编辑:TylerHJana Weschenfelder 更新时间:8/26/2021 访问量:479
我的 .NET 5.0 C# 项目中的循环依赖项 - 如何解决?
Circular Dependency in my .NET 5.0 C# project - how can I solve it?
问:
我有以下项目结构,具有以下命名空间:
- 溶液:
ProjectName
- 子项目:
ProjectName.Shared
- 包含命名空间:
ProjectName.Shared.Logging
- 包含命名空间:
- 子项目:
ProjectName.DbContext
- 有项目参考:
ProjectName.Shared
- 使用命名空间:
ProjectName.Shared.Logging
- 有项目参考:
- 子项目:
该项目当前正在使用对该项目的项目引用,因为我们希望通过解决方案范围内使用的 Logger 来记录数据。DbContext
Shared
现在要改变它,以便记录器也应该写入一些数据库。这对我来说意味着,如果我尝试在 中添加为项目引用,它将成为循环项目依赖项。ProjectName.DbContext
ProjectName.Shared
然后它看起来像这样:
- 溶液:
ProjectName
- 子项目:
ProjectName.Shared
- 包含命名空间:
ProjectName.Shared.Logging
- 具有项目引用:
ProjectName.DbContext
- 使用命名空间:
ProjectName.DbContext
- 包含命名空间:
- 子项目:
ProjectName.DbContext
- 具有项目引用:
ProjectName.Shared
- 使用命名空间:
ProjectName.Shared.Logging
- 具有项目引用:
- 子项目:
我正在考虑创建一个名为 的新子项目,但我看不出它将如何解决我的循环依赖问题; 需要,反之亦然。ProjectName.Logging
ProjectName.Logging
ProjectName.DbContext
有人知道如何解决这种循环依赖关系吗?
答:
2赞
Marc Gravell
8/26/2021
#1
四个选项:
- 合并 和 程序集
ProjectName.Shared
ProjectName.DbContext
- 看看他们中的一个是否可以声明一个接口 - 也许可以声明并接受一个接口,然后实现并传入,这样它就可以进行日志记录,而不必知道细节
ProjectName.DbContext
IDbLogger
ProjectName.Shared
- 在下面创建一个额外的包,其中包含日志记录抽象,这两个抽象都将引用
ProjectName.Shared
ProjectName.DbContext
- 像 3,但使用来自 Microsoft.Extensions.Logging.Abstractions 的预卷
ILogger[<T>]
(从技术上讲,创建一个真正的圆形构建也是可能的,但它非常复杂,非常脆弱,你不应该把它看作是绝对的最后手段)
评论