两种不同解决方案的循环依赖性

jub*_*air 7 .net c# circular-dependency design-principles circular-reference

假设有两个.net项目不在同一解决方案下.ProjectA在solution1下,ProjectB在solution2下.ProjectA引用了ProjectB,ProjectB引用了ProjectA.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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

更新1 您能解释循环依赖的条件吗?

Ave*_*isG 11

是的,这是循环依赖.

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


Ren*_*Pet 3

如果我们讨论的是循环构建依赖关系,那么当项目 A 依赖于项目 B 中的某些内容(例如通过引用项目 B 中的类)时,这就是问题。同时项目 B 依赖于项目 A,因为它引用项目 A 中的类或某些内容。这样做的问题是构建系统无法确定首先构建哪个项目,然后再构建哪个项目。

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

编辑:

至少对于我所知道的所有构建系统来说,循环构建依赖关系 100% 依赖于项目如何相互引用。Visual Studio 解决方案根本不涉及,因此这两个项目是否位于同一解决方案或不同解决方案中,甚至可能是不属于 Visual Studio 解决方案的项目(例如机器生成的项目)并不重要。

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