问题标签 [cyclic-dependency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
768 浏览

c# - Ninject 循环依赖 - 已经在使用属性注入

我在使用依赖注入的项目中遇到循环依赖问题。环顾四周,似乎避免它的唯一方法,除了重组(我也做了一些),就是使用属性注入。我试过这个,它似乎没有帮助,但我不知道为什么。这是导致问题的路径。

现在,它似乎知道它正在使用属性注入,并且所有的行为和工厂都在同一个范围内(现在调用范围,但我也尝试过线程范围),以及 UserRepository。

我对这个过程的理解是它应该达到 4,并且能够实际创建对象。此时,它应该具有对 HomeController、IUserRepository 和 IInternalUserBehavior 的引用。然后它应该在 5 上工作,并将完成的 IUserRoleService 插入到 InternalUserBehavior 中。最后,它应该将先前实例化的用户存储库(因为它在同一范围内)插入到 ModelFactory 的属性中

所以我想我的问题的简短版本是:为什么属性注入不能解决我的循环依赖问题?

0 投票
4 回答
1006 浏览

python - 如何正确处理 Python 中的循环模块依赖项?

试图找到一个好的和适当的模式来处理 Python 中的循环模块依赖。通常,解决方案是删除它(通过重构);但是,在这种特殊情况下,我们真的希望拥有需要循环导入的功能。

编辑:根据下面的答案,此类问题的通常攻击角度将是重构。但是,为了这个问题,假设这不是一个选项(无论出于何种原因)。

问题:

logging模块需要该configuration模块的一些配置数据。但是,对于某些configuration功能,我真的很想使用logging模块中定义的自定义日志记录功能。显然,将logging模块导入configuration会引发错误。

我们能想到的可能解决方案:

  1. 不要这样做。正如我之前所说,这不是一个好的选择,除非所有其他可能性都是丑陋和糟糕的。

  2. 猴子补丁模块。这听起来还不错:在初始导入之后和实际使用它的任何功能之前logging动态加载模块。不过,这意味着定义全局的、每个模块的变量。configuration

  3. 依赖注入。我已经阅读并遇到了依赖注入替代方案(特别是在 Java Enterprise 领域),它们消除了一些令人头疼的问题;但是,它们可能过于复杂而无法使用和管理,这是我们想要避免的。不过,我不知道全景图在 Python 中是如何描述的。

启用此功能的好方法是什么?

非常感谢!

0 投票
4 回答
970 浏览

c++ - C++ 错误:“'class' 没有命名类型”和“无效使用不完整类型 'struct ...'”

这是一个非常重复的问题,也在 StackOverflow 中,但即使尝试不同的答案,我也无法解决我的问题。所以,我有一些课程:

主.cpp:

富.h:

酒吧.h:

显然,我有一个循环依赖。所以我得到了臭名昭著的错误'bar' does not name a type。在这种情况下,我添加class bar;foo声明并删除#include. 当我这样做时,我得到:invalid use of incomplete type ‘struct bar'.

我尝试了一些不同的方式,也添加class foo;到 bar,但我总是有某种错误。在最后一种情况下,我得到:

另外,我从来没有抱怨过gru。作为附加信息,barmain我添加foo.

有什么有用的想法吗?非常感谢 :)

0 投票
1 回答
829 浏览

class - 将 UML 类图转换为 C++ 代码(VS 2012)

我正在将 VS2012 用于我们从头开始的课程项目,我们将使用 C++ 创建这样的东西(我认为聚合部分是相反的):

https://www.dropbox.com/s/w2zh7yltbups6cm/class.png

好吧,我们在纸上写了,为每个类编写代码没有任何问题,除了我们无法测试,因为每个类都依赖于当时尚未完成的另一个类。长话短说:每个类都有自己的未经测试的代码,VS 不会检测到任何错误,根据我们以前的经验,我们知道代码是正确的,反正没有语法错误。

当我开始编译大约 500 个错误时,其中一些错误出现在“time.h”中,我认为编译器有问题,尝试切换到 C::B 并查看它是否有效,但我需要一个不同的编译器,我没有时间下载任何大文件,严重的是,2 天内的截止日期和互联网速度很糟糕。

在这里做一些研究(和谷歌搜索)我把它缩小到循环依赖,我了解到我可以在 VS 中绘制图表并获取代码文件,不幸的是它是在 C# 中完成的,而我有一个 C++ 代码(它必须是 C++ ) .

我怎样才能在 C++ 中实现这个图?哪个类应该包含哪些标题?将来如何避免这种情况?


编辑:通过删除所有依赖项并禁用预编译的头文件来解决它(不知道我是否必须这样做),然后我将每个 .h 包含在其相应的 .cpp 中,然后我在每个 .h 中包含它需要的每个头文件利用。所有这些并没有真正解决我的问题,它是声明!我对每个标题做了#ifndef myclass, #define myclass并声明了使用的类,我认为这就是所谓的“前向声明”(如果我错了,请纠正我)无论如何它终于编译了,我将开始测试。

如果您有任何意见,那么您可以添加它们。

0 投票
1 回答
165 浏览

c++ - 命名空间内的类的循环依赖问题

我有一个循环依赖问题。我有两个头文件,它们相互依赖。我遇到的问题与命名空间中的类有关。

文件 #1

文件 #2

如何在文件#2 中转发声明 sef::Sub 类?

0 投票
1 回答
253 浏览

haskell - 解决haskell数据记录中的循环依赖

想象一下,我想编写一个处理播客提要的应用程序。要存储来自此类提要的解析信息,我会编写如下内容:

上述数据记录定义反映了数据类型之间常见的 1:n 关系:一个播客有很多集,而集属于一个播客。现在我在定义这样的播客时遇到了问题:请定义一个Podcast我已经需要剧集列表但要定义一个Episode实体我需要该Podcast实体。在我看来,在haskell中解决这种循环依赖是不可能的......

我也认为上面的代码是我用其他语言编程的遗留物。在上述风格中,我会以 python 为例,但是这种编程语言有一个状态的概念。在python中,我可以首先定义一个Podcast没有剧集的实体,然后用定义的实体初始化所有剧集,Podcast然后episodes将播客的字段设置为剧集列表。

我的问题:对播客和剧集之间的 1:n 关系建模的 Haskell 方法是什么?

对评论中问题的回答:

为什么一集必须引用特定的播客?有一个功能会很好

它会在我需要时返回剧集的播客。我知道,一种解决方案是将Podcast实体也传递给剧集的每个函数,即我替换每个函数

我需要上述podcast功能的地方

编写尽可能少的代码并且不必随身携带Podcast实体,这将是非常棒的。

也许我稍微改变一下我的问题:在没有字段的情况下定义Episode数据记录是完全可以的。podcast如何实施

在这种情况下?

如果有人稍后制作包含其他播客的剧集的播客怎么办?就我而言,这不会发生,即使是这样,将同一集视为不同的集是完全可以的。(事实上​​,考虑到这个问题会将 1:n 关系提升为 n:n 关系,但如何在 haskell 中定义这些关系的主要问题仍然是相同的)。

0 投票
1 回答
429 浏览

scala - 如何在不同配置中将 SBT 用于相互依赖的项目

我想要以下 SBT 构建设置:

什么时候core是主模块,包括域对象,并且testkit是一个用于测试支持代码(构建器、匹配器、测试驱动程序等;而不是测试本身)的模块,它依赖于core.

对于此设置,SBT 给出了一个错误,尽管由于使用了不同的配置(编译,然后根据编译,然后根据两者编译),Cyclic reference因此实际上并没有循环依赖。coretestkitcorecore test

我找到了一种通过替换其中一个dependsOnuse来解决此问题的肮脏方法unmanagedClasspath,例如:

这感觉像是一种 hack,并且还会sbt-idea生成不正确的 IntelliJ 项目(除其他外)。

有更好的解决方案的想法吗?SBT 是否支持这样的结构?

0 投票
2 回答
1763 浏览

java - 在 Java 中检测 Hashmap 中的循环依赖

我有一个哈希图:

非循环情况的示例可能是:

循环情况的示例是:

我想拒绝循环情况,因此需要一个可以检测提供的哈希图是否有任何循环的函数:

我已经阅读了建议检测周期的算法的帖子,但是作为 java 的新手无法使用这些知识来构成上述功能。

0 投票
2 回答
2679 浏览

python - 如何在自定义 PyYAML 构造函数中处理递归?

PyYAML 可以处理常规 python 对象中的循环图。例如:

片段#1。

这段代码成功了,所以很明显在加载序列化对象时有一些机制可以防止无限递归。当我编写自己的 YAML 构造函数时,如何利用它?

例如,sayNode是一个具有瞬态字段foo和的类,以及非瞬态bar字段child。只child应将其放入 yaml 文档中。我希望这样做:

片段#2。

但它失败了:

我明白为什么了。我的构造函数不是为递归而构建的。它需要在完成构造父对象之前返回子对象,并且当子对象和父对象是同一个对象时会失败。

但显然 PyYAML 具有解决此问题的图遍历,因为 Snippet #1 有效。也许有一个传递来构造所有对象,第二个传递来填充它们的字段。我的问题是,我的自定义构造函数如何与这些机制联系起来?

这个问题的答案将是理想的。但是,如果答案是我不能使用自定义构造函数来做到这一点,并且有一个不太理想的替代方案(例如将YAMLObject类混合到我的Node类中),那么这个答案也会受到赞赏。

0 投票
0 回答
578 浏览

haskell - 如何在 Haskell 中处理这种循环模块依赖

层次结构的简化版本:

现在有一个模块 MyState:

最后是引入循环依赖的模块:

如您所见,我的 SomeType 导入 A 是因为我们的一个字段需要它。并且 A 正在导入状态,该状态导入了某种引入循环依赖的类型。

解决这种循环依赖的方法是什么?谢谢。