首页 > 解决方案 > 带有 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。我可以做什么?

标签: javafxfxmlguicecode-injection

解决方案


推荐阅读