c# - C# 中两个项目中的循环依赖

标签 c# circular-dependency

我在名为 ProjectA (ConsoleApplication) 和 ProjectB (ClassLibrary) 的解决方案中有两个项目。 ProjectA 引用了 ProjectB。一般来说,ProjectA 调用 ProjectB 中的一个方法来做一些事情并将结果返回给 ProjectA。然而,有时我需要 ProjectB 向 ProjectA 发送一些“附加”信息(更具体地说是调用 ProjectA 中的 Console.WriteLine() 方法)。为此,我需要在 ProjectB 中引用 ProjectA,但是当我尝试这样做时,出现以下错误:

无法添加对 ProjectA 的引用。添加此项目作为引用会导致循环依赖

我了解整个耦合概念并且收到此消息确实有意义,但是,在某些情况下我需要向 ProjectA 发送其他信息。有什么想法吗?

最佳答案

实际上可以创建具有成功编译的循环依赖项的项目,但我强烈建议不要这样做。相反,组织您的项目,使它们具有非循环依赖关系图。

有很多方法可以解决这个问题,其他答案中已经提到了其中的几种方法。一个尚未发布的是完全消除项目 A 和项目 B 之间的依赖关系,并创建一个 第三个​​ 项目 C,它定义了 A 和 B 进行通信的接口(interface)。即:

namespace C
{
    public interface IFoo { void Frob(); }
    public interface IBar { void Qux(); }
}

然后让项目A和B引用项目C,并让它们的类实现IFoo、IBar等。当项目 A 中的方法需要在项目 B 中的对象上调用 Frob 时,它通过获取 IFoo 来实现,而不是获取 B 中的某个类。

这有意义吗?

关于c# - C# 中两个项目中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14048235/

相关文章:

circular-dependency - 接口(interface)如何解决循环依赖?

python - sqlalchemy.exc.CircularDependencyError : Circular dependency detected 错误

c# - list clear 是否删除之前包含的对象

c# - 无法从 IEnumerable<T> 转换为 ICollection<T>

c# - 如何在 ASP.NET 中获取客户端日期和时间?

MySQL更新查询在同一个表上使用聚合子查询

c# - System.Text.Json 将空字符串全局序列化为空字符串

c# - 如何编写按行和按列排序的二进制矩阵/数组?

c++ - 解决由于类之间的循环依赖而导致的构建错误

java - 这是循环依赖吗?