我将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 . 我可以做什么?