Я представил Google Guice в своем приложении JavaFx.Однако у меня есть некоторые проблемы, когда я пытаюсь @ Inject мой контроллер в другой контроллер.
Прежде всего, я делаю:
loader.setControllerFactory(Main.getInjector()::getInstance);
MainController включает TopMenuButtonsController в файле fxml:
<fx:include fx:id="topMenuButtons" source="TopMenuButtons.fxml" />
Затем я пытаюсь загрузить свой MainController с помощью FXMLLoader с Guice Controller Factory.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 не работает). Я также вижу, что этот внедренный экземпляр отличается от того, который я использую (другой идентификатор объекта)
Я могу просто заставить его работать, выполнивэто в MainController:
@FXML
private void initialize() {
topMenuButtonsController.setMainController(this);
}
но я намеревался избавиться от таких вещей и использовать DI. Что я могу сделать?