JavaFx с Google Guice дает два разных экземпляра контроллера - PullRequest
0 голосов
/ 09 декабря 2018

Я представил 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. Что я могу сделать?

...