不同解决方案的两个项目之间的循环依赖
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 解决方案的组织无关。对于以下所有情况,问题都是相同的:
- 类在不同项目的不同解决方案中。
- 类在同一解决方案的不同项目中。
- 类在同一解决方案的同一项目中。
- 类在同一个文件中在同一个解决方案中。
循环依赖是一个编译错误,由于编译器在任何位置都以相同的方式处理类型,因此循环依赖仍然存在。
现在真正的问题是 - 为什么你有循环依赖(故意)?
如果我们谈论循环 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 解决方案的项目,都没有关系,例如机器生成的项目。
如果您不使用自动构建系统,而是手动构建项目,那么您就是构建系统。您将如何决定先建哪个项目,再建哪个项目?
假设有两个.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 解决方案的组织无关。对于以下所有情况,问题都是相同的:
- 类在不同项目的不同解决方案中。
- 类在同一解决方案的不同项目中。
- 类在同一解决方案的同一项目中。
- 类在同一个文件中在同一个解决方案中。
循环依赖是一个编译错误,由于编译器在任何位置都以相同的方式处理类型,因此循环依赖仍然存在。
现在真正的问题是 - 为什么你有循环依赖(故意)?
如果我们谈论循环 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 解决方案的项目,都没有关系,例如机器生成的项目。
如果您不使用自动构建系统,而是手动构建项目,那么您就是构建系统。您将如何决定先建哪个项目,再建哪个项目?