javafx - 带有 Google Guice 的 JavaFx 提供了两个不同的控制器实例
问题描述
我在我的 JavaFx 应用程序中引入了 Google Guice。但是,当我尝试将我的控制器 @Inject 注入另一个控制器时,我遇到了一些问题。
首先,我这样做:
loader.setControllerFactory(Main.getInjector()::getInstance);
MainController 在 fxml 文件中包含 TopMenuButtonsController:
<fx:include fx:id="topMenuButtons" source="TopMenuButtons.fxml" />
然后我尝试使用 FXMLLoader 和 Guice Controller Factory 加载我的 MainController。TopMenuButtons 会自动初始化,因为它包含在 MainController 中。
最后我尝试将 MainController 注入 TopMenuButtonsController (因为按钮控制在 MainController 中显示的内容:
public class TopMenuButtonsController {
private MainController mainController;
@Inject
public void setMainController(MainController mainController) {
this.mainController = mainController;
}
@FXML
public void onCreateOrder(ActionEvent event) {
mainController.setCenter(MainController.CREATE_ORDER_FXML);
}
它成功了,但是这里注入的实例的所有字段都设置为 null(@FXML 注释不起作用)。我还看到这里注入的这个实例与我使用的不同(不同的对象 id)
我可以通过在 MainController 中执行此操作来简单地使其工作:
@FXML
private void initialize() {
topMenuButtonsController.setMainController(this);
}
但我的意图是摆脱这些东西并使用 DI。我可以做什么?
解决方案
推荐阅读
- php - 我的简单 Contact.php 表单不起作用
- java - 需要验证int;hasNextInt 不起作用
- c++ - 为什么 Visual Studio 2019 中的 std:cout 中没有竞争条件?
- jquery - WebPacker 未加载模块 (metisMenu)
- php - 如何在 Woocommerce 特色产品上显示描述?
- html - 如何停止在 CSS 中重复图像?
- angular - angular2如何在页面加载时打开ng-zorro消息框
- c# - 如何使用通配符在数组中搜索字符串?C#
- typescript - 在表中的 typrscript 中使用 TypeORM 插入对象数组
- python - Python时间序列,做出两个不同后恢复原样