带有Google Guice的JavaFx提供了两个不同的Controller实例

时间:2018-12-09 20:57:40

标签: javafx fxml guice code-injection

我在我的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。我能做什么?

0 个答案:

没有答案