问题标签 [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 投票
0 回答
106 浏览

java - 循环依赖迫使我根据状态拆分服务和工厂。可以吗?

我正在使用 MVVM 模式创建 JavaFX 桌面应用程序。每个都View需要一个ViewModel. ViewA viewA = new ViewA(new ViewModelA());我决定不使用 ,而是使用工厂模式来抽象它。

ViewFactory 构造函数具有视图模型所需的其他服务的参数。例如,我的应用程序的一部分显示了存储在数据库中的所有图像集合,对应于CollectionsViewCollectionsViewModel。为了从数据库中检索所有图像和集合,我创建了一个CollectionService,它被传递给 ViewFactory。

编码:

到目前为止一切都很好。问题从另一个开始View,即ConnectView,它基本上是一个底部带有连接按钮的数据库选择屏幕。当按下连接按钮时,视图应该变为主视图,CollectionsView为了简单起见。

为了稍微抽象一下,我创建了一个ConnectionManager接口(我知道这个名字不是最好的,但我想不出更好的名字。也许ConnectionNotifier吧?)基本上是一种方法,表明已经建立了与数据库的新连接,并且获得相应的 SQLConnection实例。

编码:

现在在 的实现中ConnectionManager,当connected被调用时,需要数据库的服务被实例化并且屏幕上的视图变为CollectionsView.

为此,我创建了一个名为的新类NavigationService,它使用创建视图并将其ViewFactory设置为屏幕上的视图。

编码:

同样,一切正常。但是,如果我有一个View不需要连接状态的附加设备怎么办?也许连接屏幕上的帮助按钮应该创建一个HelpView?如何返回连接屏幕?要goToConnectView()在导航器中添加一个,我必须将它传递ConnectionManager给创建视图,而这又需要导航器。

所以要创建ConnectionManager,我需要NavigatorService,反之亦然。

我想过的解决方案:

  1. 创建没有导航器的连接管理器,创建导航器,然后只使用设置器。
  2. 创建没有导航器的连接管理器,创建导航器并在建立新连接时使用侦听器模式调用导航器。
  3. 将导航器拆分为ConnectedStateNavigatorServiceand NotConnectedStateNavigator,这又需要将视图工厂拆分为ConnectedStateViewFactoryand NotConnectedStateViewFactory

我不喜欢选项 1,因为我不想依赖额外的语句,只是看起来很脏。

我也不喜欢选项 2,因为这种带有侦听器、事件等的执行流程在我看来更适合 C#,而不是 Java 的正确选择。再一次,我不得不依靠额外的addListener电话。

虽然我不喜欢选项 3,但这是我选择的选项。但又一次感觉不对劲。代码开始变得杂乱无章,我在应用程序中将它们编码为接口的服务和工厂,这意味着每个实现都有额外的类。

我的问题是:你觉得这样好吗?

注意:我不想使用 mvvmFX 框架,因为我不喜欢所有的魔法并且也过于依赖反射。

(对不起我的英语,但我不是母语人士)

0 投票
4 回答
35054 浏览

angular - Angular 8:无法实例化循环依赖 - ActivatedRoute

我正在尝试将APP_INITIALIZERAngular 集成到我的项目中,以便在启动应用程序之前执行一些功能。当我在我的服务中使用来自 Angular的ActivatedRoute时,问题就出现了。

错误是:

我想我在内部使用了两次导入或类似的东西。基本上我尝试了其他一些配置,但最后总是给我同样的错误。

堆栈闪电战示例: https ://stackblitz.com/edit/angular-bhpe7m

预期行为:只是为了能够通过 ActivatedRoute 服务检索一些 QueryParams 并在运行 Angular 应用程序之前对它们执行一些功能

0 投票
1 回答
48 浏览

javascript - 如何在 Node.js 中设置交叉同步?(相关循环依赖)

我有 2 个不同的 js 文件,它们相互依赖,如下所示:


我的目标是同时在实例级别调用updateImage()内部的函数并调用内部loop.js的另一个函数。所以它们可以分开为 2 个不同的文件,但仍然可以在我需要的时候相互访问。routine()slider.js

问题是这会引发一个称为最大回调堆栈的错误。

未捕获的 RangeError:超出最大调用堆栈大小

我已经阅读了一些关于循环依赖#1#2的文章,但文章#2 是基于打字稿提到的。我已经更改了没有 typescript 关键字的代码,然后浏览器触发了同样的错误。


有没有办法在 Node.js 中设置交叉调用函数?

0 投票
1 回答
144 浏览

java - 如何解决此堆栈溢出错误?

StackOverFlow当我尝试运行我的井字游戏程序时,我正在努力解决这个异常。

通过阅读堆栈跟踪,我知道StackOverFlow错误是循环关系的结果。这是因为当我miniFrame在构造函数内部实例化类时TicTacToeFrame,一个TicTacToeFrame对象被用作miniFrame构造函数的参数。结果,这会导致无限递归。

TicTacToeFrame构造函数实例化miniFrame dialogBox = new miniFrame (this).

这是将miniFrame对象TicTacToeFrame作为参数的构造函数。但是我不明白为什么JVM会StackOverFlow在第9行发现错误:

我可以使用的另一种解决方案是-Xss使用命令行增加堆栈帧大小的标志。但我觉得这可能是一种逃避。

0 投票
1 回答
1968 浏览

java - 解决gradle中的循环依赖

我最近开始开发一个 java 项目,其中包含一些子项目。他们都是gradle。因此,假设有两个项目 A 和 B 已经实施。而且我要介绍另一个gradle项目C。依赖是这样的。

  • A 依赖于 B
  • B 依赖于 C
  • C 依赖于 A

所以我需要在没有循环依赖错误的情况下实现这个项目 C,因为它是在我尝试使用 gradle 构建项目时给出的。我看到一些答案,Interface 是一个解决方案。但在我的情况下,项目 A 和 B 是大型项目,我想不出如何为它们引入接口。我唯一能做的就是为项目 C 引入接口。那么有没有办法解决这些案例的问题?如果没有这样的方法是什么?请注意,这些 A、B、C 项目是单独的项目,因此不能合并为一个项目。

0 投票
1 回答
171 浏览

javascript - 如何获取、解决和验证传递/循环依赖

我需要一些自定义方法来解析可能具有传递性的变量并验证循环/不可解析的字段。例如

我的预期输出是

0 投票
1 回答
382 浏览

c++ - 类的 C++ 循环依赖(单例)

我在编译具有循环依赖的类时遇到问题,我找不到编译代码的方法

主要问题出现在相互依赖的类链中

例如我有 6 个头文件(类)(A、B、C、D、E、F)

A 包含在 E

F、D 包含在 A 中

E 包含在 F、D 中

现在我有一个循环并且无法修复它

我简化了问题,然后创建了一个简单的例子来展示我的确切问题

有没有办法或解决方案来解决这个问题?

0 投票
0 回答
147 浏览

javascript - Typescript,React-循环依赖解决问题。TypeError:对象原型可能只是一个对象或null:未定义

我正在开发一个带有打字稿的反应应用程序。在我面临的问题中,有 2 个单独的接口和一个导入这些接口的组件类。问题是,当应用程序运行时,组件类尝试顺序导入两个接口,但是,接口也会相互导入,这会导致循环错误行为并导致应用程序崩溃,TypeError: object prototype may only be an object or null: undefined. 我将示例代码放在下面。此外,我无法修改作为接口内字段的数据模型。欢迎任何帮助。

注意:所有接口和类都位于不同的文件中。

0 投票
2 回答
170 浏览

ios - 循环依赖错误 J2OBJC 归档构建?

我的 Ionic/iOS 项目使用 J2OBJC 作为内置的内部 Xcode 设置时遇到循环依赖问题。

如 J2OBJC 文档中所述,我已经在我的 ionic 项目中设置了构建规则和设置。我已经根据需要添加了库、用户标题和框架搜索路径(首先只有应用程序目标,并且还尝试了应用程序目标和工作区)并创建了用户定义的 $J2OBJC_HOME 和(这可能不是要求的一部分)我也添加了 $PROJECT_DIR 。我还添加了 java 构建规则

"if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME 在 Settings.xcconfig 中没有正确定义,当前设置为 '${J2OBJC_HOME}'"; exit 1; fi; "${J2OBJC_HOME}/ j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "${PROJECT_DIR}/App" --no-package-directories -use-arc --prefix Flowers=JOE -g ${INPUT_FILE_PATH};"

我已经构建了模拟器和 iPhone 并在两者上运行它们,它们似乎正在工作。但是,当我为项目存档(以便我可以创建 .ipa)时。我得到一个循环依赖错误。我尝试了很多事情,例如,项目的新开始,使用不同的 URL 作为搜索路径,使用递归和非递归,检查了几次文档,查看了论坛,但仍然没有解决方案。任何想法将不胜感激!

0 投票
2 回答
87 浏览

c++ - C ++:当两个类包含指向另一个类的指针时,如何解决派生类之间的模板循环依赖?

我有一个父类和一些从它派生的类。我想“配对”两个派生类,其中 eac 有一个指向另一个的指针。

代码示例:

我知道我可以用虚函数做到这一点,但我试图找到一种使用模板的方法。

我从http://qscribble.blogspot.com/2008/06/circular-template-references-in-c.html找到了一个解决方案:

但它只适用于两个固定类 A 和 B。考虑到我有很多派生类,我想“配对”其中的任何两个,我该如何解决这个问题?

更新 1. 修复第一个代码块中的拼写错误 更新 2. 我尝试了以下代码

它编译并打印B A。但是这段代码正确吗?它有任何副作用吗?