Java 加力燃烧室.fx是否可以注入非演示者类?

Java 加力燃烧室.fx是否可以注入非演示者类?,java,javafx,dependency-injection,Java,Javafx,Dependency Injection,正如标题所示,是否可以使用afterburner.fx将对象注入到非presenter/controller类中?一直在尝试让它工作,但坦率地说没有取得任何进展。正如您所知,在presenter类中使用加力燃烧室框架注入是有效的: public class AfterburnerPresenter { @Inject private Model model; } public class JavaFXApplication100 extends Application {

正如标题所示,是否可以使用afterburner.fx将对象注入到非presenter/controller类中?一直在尝试让它工作,但坦率地说没有取得任何进展。

正如您所知,在presenter类中使用加力燃烧室框架注入是有效的:

public class AfterburnerPresenter {

    @Inject
    private Model model;

}
public class JavaFXApplication100 extends Application {

    @Inject
    private Model model;

    @Override
    public void start(Stage stage) throws Exception {

        model.set...;
    }

}
但它在非演示者类中不起作用:

public class AfterburnerPresenter {

    @Inject
    private Model model;

}
public class JavaFXApplication100 extends Application {

    @Inject
    private Model model;

    @Override
    public void start(Stage stage) throws Exception {

        model.set...;
    }

}
这将返回空指针异常,因为
模型
为空

原因如下:当演示者被实例化时,用
Inject
注释的字段将被注入

这只适用于演示者,不会扫描其他类以查找
@Inject

幸运的是,有一种方法可以将模型、服务甚至演示者类注入到非演示者类中。如果我们再次检查加力燃烧室.fx
喷油器
,我们会找到一些静态方法来帮助我们。基本上:

  • 注入器实例化重置中心(clazz类)
  • 注入器。实例化emodelorservice(clazz类)
样本

让我们创建一个快速示例

模型

加力燃烧剂

加力视图

加力燃烧室

如果您运行它:


正如您所知,使用加力燃烧室框架喷射在presenter类中工作:

public class AfterburnerPresenter {

    @Inject
    private Model model;

}
public class JavaFXApplication100 extends Application {

    @Inject
    private Model model;

    @Override
    public void start(Stage stage) throws Exception {

        model.set...;
    }

}
但它在非演示者类中不起作用:

public class AfterburnerPresenter {

    @Inject
    private Model model;

}
public class JavaFXApplication100 extends Application {

    @Inject
    private Model model;

    @Override
    public void start(Stage stage) throws Exception {

        model.set...;
    }

}
这将返回空指针异常,因为
模型
为空

原因如下:当演示者被实例化时,用
Inject
注释的字段将被注入

这只适用于演示者,不会扫描其他类以查找
@Inject

幸运的是,有一种方法可以将模型、服务甚至演示者类注入到非演示者类中。如果我们再次检查加力燃烧室.fx
喷油器
,我们会找到一些静态方法来帮助我们。基本上:

  • 注入器实例化重置中心(clazz类)
  • 注入器。实例化emodelorservice(clazz类)
样本

让我们创建一个快速示例

模型

加力燃烧剂

加力视图

加力燃烧室

如果您运行它:


感谢您对我的简短问题做出如此清晰的解释:)正是我所需要的。它工作正常。谢谢您。说得有点太早了。虽然共享我的模型类非常有效,但是共享一个类的多个实例怎么样?例如,将几个不同的窗格对象注入到一个非presenter类中?一旦注入一个对象,它的引用将添加到一个内部映射中,因此您无法创建它的不同实例。基本上是单身。关于在非presenter类中注入UI对象,如果它们与UI无关,我认为这不是一个好主意。毕竟,你应该尊重MVC。但是,如果您有一个工厂单元实现,它可能是有意义的。无论如何,请注意,如果您有一个由其view/presenter/fxml定义的对象,您可以使用
new ObjectView().newView()
,从中创建任意多的实例。感谢您对我的非常简短的问题做出如此清晰的解释:)正是我所需要的,它工作得非常好。谢谢。我说得有点太早了。虽然共享我的模型类非常有效,但是共享一个类的多个实例怎么样?例如,将几个不同的窗格对象注入到一个非presenter类中?一旦注入一个对象,它的引用将添加到一个内部映射中,因此您无法创建它的不同实例。基本上是单身。关于在非presenter类中注入UI对象,如果它们与UI无关,我认为这不是一个好主意。毕竟,你应该尊重MVC。但是,如果您有一个工厂单元实现,它可能是有意义的。无论如何,请注意,如果您有一个由其view/presenter/fxml定义的对象,则可以使用
newobjectview().newView()
从中创建任意数量的实例。