不同解决方案的两个项目之间的循环依赖

Circular Dependency among two Projects of Different Solution

假设有两个.net 项目不在同一个解决方案下。 ProjectA 在 solution1 下,ProjectB 在 solution2 下。 ProjectA 引用了 ProjectB,而 ProjectB 引用了 ProjectA。有两个 classes ProjectA_Class 和 ProjectB_Class。 ProjectA_Class 创建 ProjectB_Class 的对象,ProjectB_Class 创建 ProjectA_Class 的对象。

namespace ProjectB
{
    public class ProjectB_Class
    {
        public ProjectB_Class()
        {
            ProjectA_Class projA = new ProjectA_Class();
        }
    }
}

namespace ProjectA
{
    public class ProjectA_Class
    {
        public ProjectA_Class()
        {
            ProjectB_Class projB = new ProjectB_Class();
        }
    }
}

我对循环依赖感到困惑。它不是在两个 classes 之间创建循环依赖,尽管它们不在同一个解决方案中吗?我们知道如果这两个项目驻留在同一个解决方案中 Visual studio 将不允许我们在 ProjectB 中引用 ProjectA 并在 ProjectA 中引用 ProjectB,因为它会创建循环依赖。尽管两个项目不在同一个解决方案中,但它是否仍然在两个项目之间创建循环依赖?假设,ProjectA中有一个class C创建了一个ProjectB_Class的对象,而ProjectB_Class没有使用任何Class C的实例。这不是循环依赖吗ProjectA 和 ProjectB 都互相引用了?

更新 1 能否请您解释一下循环依赖的情况?

是的,是循环依赖

解决方案和项目只是组织文件的一种方式,但事实仍然是,如果 2 类 相互引用,则无论它们是否在同一个解决方案中,都将被视为循环依赖.

循环依赖在之间。这与项目 and/or 解决方案的组织无关。对于以下所有情况,问题都是相同的:

  1. 类在不同项目的不同解决方案中。
  2. 类在同一解决方案的不同项目中。
  3. 类在同一解决方案的同一项目中。
  4. 类在同一个文件中在同一个解决方案中。

循环依赖是一个编译错误,由于编译器在任何位置都以相同的方式处理类型,因此循环依赖仍然存在。

现在真正的问题是 - 为什么你有循环依赖(故意)?

如果我们谈论循环 build 依赖,那么当项目 A 依赖于项目 B 中的某些东西时,例如通过引用 class在项目 B 中。同时项目 B 依赖于项目 A,因为它引用了项目 A 中的 class 或其他内容。问题是构建系统无法确定要构建哪个项目首先,然后构建哪个。

但是你发布的代码中有一种更奇怪的循环依赖。你的两个 classes 的构造函数试图实例化另一个 class,所以 A 实例化 B,B 实例化 A,B 实例化 B,然后......你明白了。

编辑:

Circular build 依赖性,至少对于我所知道的所有构建系统,100% 取决于 projects 参考彼此。 Visual Studio 解决方案根本不涉及,因此无论两个项目是在同一个解决方案中还是不同的解决方案中,或者甚至是不属于 Visual Studio 解决方案的项目,都没有关系,例如机器生成的项目。

如果您不使用自动构建系统,而是手动构建项目,那么就是构建系统。您将如何决定先建哪个项目,再建哪个项目?