什么是循环依赖关系,我该如何解决?

ElektroStudios

设想


我有一个解决方案,在该解决方案上,我有(多个)2个项目。

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

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

问题


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

问题是,当我尝试添加项目引用时,出现以下错误消息:

循环依赖错误

问题


有人可以用其他简单的词(如果在错误中暗含代码的情况下,也可以通过代码示例)向我解释什么是循环依赖?最重要的事情是:我该怎么做才能解决它?在回答之前,请先阅读我研究的最后一句话)。

研究


这是我第一次听到“循环依赖”一词;我已经从MSDN阅读了这篇文章,但我什么都不懂

反正我见过像圆形dependencys的许多问题这个,从我在这个问题见过看来,循环依赖意味着两个项目不能在它们之间在同一时间基准,只是这两个项目中的一个可以与其他参考; 并且所有回答该问题的人都说过诸如“重新设计才是解决方案”或“循环依赖不是良好实践”之类的事情,但是,就我而言,重新设计将意味着在两个项目中都定义相同的类型,我认为这也不是一个好习惯,当然,构建一个额外的程序集/项目只是为了存储一个类型以在两个项目中引用该程序集……这是我认为的最糟糕的主意。

马丁·韦尔詹斯

什么是礼节?

为了了解什么是循环性,最好了解什么是循环性及其对编译器的意义。

假设您有一个项目,并且在一个类中,您定义了以下内容:

Public Class MyClass
    'Some code here
    Private MyString As String
    'Some code there
End Class

编译项目时,编译器会运行String类,该类在称为System的DLL文件中定义。然后,它将将该DLL链接到您的项目,因此在运行时,当在字符串上定义或执行操作时,将加载System.dll来执行这些操作。

现在,假设您在课堂上进一步定义了以下定义

'Some code here
Private MyObjet as CustomClass1
'Some code there

假设CustomClass1是在您的另一个项目Project2.DLL中定义的:

Public Class CustomClass1
    'Your customr class code
End Class

因此,在编译第一个项目时,编译器将运行到CustomClass1定义中,它知道它位于Project2.dll中,因此将在之前编译Project2,以便能够在第一个项目中添加该引用。

那就是礼节,它是分层的,必须有一个起点。甚至String类都依赖于其他类,最后,它们都依赖字节或位来完成这项工作,因为那是计算机只能1和and一起玩的事情0

所以圆形部分

因此,如果您在Project2中有一个链接到第一个项目的引用(字段定义等),会发生什么?

  • 编译器读取您的第一个项目,然后运行到 CustomClass1
  • 然后尝试编译Project2,因为在那里定义了CustomClass1
  • 然后运行到您的第一个项目中定义的类
  • 它尝试编译您的第一个项目以将其链接到第二个项目
  • 然后它运行到 CustomClass1
  • 然后它尝试编译Project2
  • 我想你明白了...

因此在某些时候,编译器会显示错误,表示无法编译,因为它无法理解您要执行的操作...

是的,电脑真傻。

怎么解决呢?

解决这类问题有时很困难,但是基本思想是建立一个层次结构,将基类(不需要依赖关系的那些基类)放在一起,然后在它们之上建立。

将相互依赖的所有类放在一起,它们构成了您在应用程序中尝试执行的操作的一层。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章