c# - 什么是循环依赖,我该如何解决?

标签 c# .net vb.net visual-studio circular-dependency

场景


我有一个解决方案,我有(超过)2 个项目。

第一个项目有一个对第二个项目的项目引用。第二个项目没有对第一个项目的引用。

好吧,在第一个项目中我定义了一个可继承的类类型,我希望第二个项目中的一些类继承自它。

问题


显然,如果我想继承在第一个项目中定义的类型,在第二个项目中我需要添加对第一个项目的项目引用才能看到类型并继续。

问题是当我尝试添加项目引用时,我收到此错误消息:

Circular dependency error

问题


有人可以用其他简单的词来解释我(如果错误中暗示了代码,也可以用代码示例)什么是循环依赖?最重要的是:我能做些什么来解决它? (请在回答前阅读我研究的最后几句)。

研究


我是第一次听到“循环依赖”这个词;我读过 this 来自 MSDN 的文章,但我一无所知

无论如何,我看到了很多循环依赖的问题,比如 this ,从我在那个问题中看到的情况来看,似乎循环依赖意味着两个项目不能同时在它们之间引用,这两个项目中只有一个可以引用另一个; 并且所有回答该问题的人都说“重新设计是解决方案”或“循环依赖不是好的做法”,但是,重新设计在我的例子中意味着在两个项目中定义相同的类型,我认为这也不是好的做法,当然构建一个额外的程序集/项目只是为了存储一个类型以在两个项目中引用该程序集.. .是我认为最糟糕的想法。

最佳答案

循环依赖是项目 A 依赖于项目 B 中的某些东西,项目 B 依赖于项目 A 中的东西。这意味着要编译项目 A,您必须先编译项目 B,但您不能这样做,因为 B 需要 A待编译。这就是循环依赖导致的问题。

如果您向已经构建的项目引入循环依赖,则很难发现它,因为标准构建选项不会删除现有的目标文件,因此您可以先构建 A(或 B)。只有当您尝试在以前从未构建过解决方案的不同机器上或者进行清理和构建时,您才会发现它。

re-designing in my case will mean define the same type in both projects, which I don't think that could be good practices neither.

在这种情况下,您需要创建第三个项目“C”,其中包含 A 和 B 都依赖的类,因此它们不再相互依赖。您可能只需将类分开,这样就可以在不创建第三个项目的情况下对依赖项进行排序。

关于c# - 什么是循环依赖,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38042130/

相关文章:

c# - Swagger 代码生成 IO : Change Service Naming Convention and Nickname

c# - 标记在 XML 命名空间中不存在

c# - 在简单注入(inject)器中注册部分开放的泛型

c# - IEnumerable IndexOutOfRangeException异常

c# - 排序后滚动条重置到 treeView 的顶部?

c# - 如何从一种方法中使用的类访问不同方法中的信息?

c# - 数学表达式问题

.net - 破坏旧的 clickonce 应用程序以便没人可以使用它? (远程卸载所有安装?)

.net - 如何获取托管对象的引用计数?

vb.net - 包含 1000 多个项目的列表框卡住 Visual Studio