嵌入式JavaFX、注入视图和Dagger 2

嵌入式JavaFX、注入视图和Dagger 2,java,javafx,dependency-injection,raspberry-pi,dagger-2,Java,Javafx,Dependency Injection,Raspberry Pi,Dagger 2,我正在开发一套在嵌入式工业系统上运行的产品,其中一个代码库需要稍微修改,才能成为多个不同的应用程序(约20个产品)。它将使用Java13和JavaFX,我打算使用Dagger2注入不同的FXML视图和控制器,这取决于创建不同的产品。例如,一个产品可能有一个包含邮政编码文本字段的输入表单,而变体可能有一个组合框而不是文本字段: <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?

我正在开发一套在嵌入式工业系统上运行的产品,其中一个代码库需要稍微修改,才能成为多个不同的应用程序(约20个产品)。它将使用Java13和JavaFX,我打算使用Dagger2注入不同的FXML视图和控制器,这取决于创建不同的产品。例如,一个产品可能有一个包含邮政编码文本字段的输入表单,而变体可能有一个组合框而不是文本字段:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>


<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <GridPane BorderPane.alignment="CENTER">
        <columnConstraints>
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
          <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
          <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
         <children>
            <TextField promptText="First Name" />
            <TextField promptText="Last Name" GridPane.columnIndex="1" />
            <TextField promptText="Zip Code" GridPane.rowIndex="1" />
            <CheckBox mnemonicParsing="false" text="Include inflation factor" GridPane.columnIndex="1" GridPane.rowIndex="1" />
            <Button mnemonicParsing="false" text="Do Something" GridPane.rowIndex="2" />
            <Button mnemonicParsing="false" text="Cancel" GridPane.columnIndex="1" GridPane.rowIndex="2" />
         </children>
      </GridPane>
   </center>
</BorderPane>

对于这两种变体,控制器非常相似,只有邮政编码TextField与ComboBox的处理方式不同

在其他变体中,“Do Something”按钮的事件处理程序将根据产品变体执行不同的操作。我希望能够在构建时定义这些变体,以便基于Gradle的构建服务器可以指定要构建的变体


我如何使用Dagger 2解决这个问题,这是最合适的解决方案吗?

我对Dagger 2不太了解,但我知道如何使用常见的JavaFx Api:

“Common.fxml”:


变体的实现:

公共类变量1{
@FXML
私有void handleXxx(){
//打印111
}
}
公共类变量2{
@FXML
私有void handleXxx(){
//打印222
}
}
//大体上
FXMLLoader loader1=新的FXMLLoader(getClass().getResource(“Common.fxml”);
Variant1 Variant1=新的Variant1();
loader1.设置控制器(variant1);
父p1=loader1.load();
FXMLLoader loader2=新的FXMLLoader(getClass().getResource(“Common.fxml”);
Variant2 Variant2=新的Variant2();
loader2.设置控制器(variant2);
父p2=loader2.load();

有什么关联?几年前,我写过这篇文章作为“概念证明”,但这可能是一种你可以尝试的方法。我认为OP是在问如何在布局上有所变化(特别是在所使用控件的选择上),而不是如何处理事件。