我在我的JavaFx应用程序中介绍了Google Guice。但是,当我尝试将我的控制器@Inject注入另一个控制器时,我遇到了一些问题。
我首先要做:
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。我能做什么?