我将Google Guice引入了我的JavaFx应用程序 . 但是,当我尝试将控制器注入另一个控制器时,我遇到了一些问题 .

首先我做的是:

loader.setControllerFactory(Main.getInjector()::getInstance);

MainController具有包含在fxml文件中的TopMenuButtonsController:

<fx:include fx:id="topMenuButtons" source="TopMenuButtons.fxml" />

然后我尝试使用带有Guice Controller Factory的FXMLLoader加载我的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 . 我可以做什么?