Java 加力燃烧室.fx是否可以注入非演示者类?
正如标题所示,是否可以使用afterburner.fx将对象注入到非presenter/controller类中?一直在尝试让它工作,但坦率地说没有取得任何进展。正如您所知,在presenter类中使用加力燃烧室框架注入是有效的: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 {
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()
从中创建任意数量的实例。