我已经阅读了大量的 stackoverflow 和其他资源试图找到答案,也许我只是不明白。
我正在尝试将 GIN @Singleton 注入到我的应用程序客户端代码中的几个小部件和类中。使用 Spring,我可以简单地使用正确的注释,并且几乎可以在任何地方注入任何东西。使用 GWT 和 GIN,除了构造函数之外,我似乎无法注入任何地方。我不想注入构造函数,因为我正在处理一个非常大的项目,这几乎是不可能的。
其中一些类是小部件,而另一些则不是。它们在整个应用程序中使用,有些是注入的,有些是由 new 实例化的,还有一些两者都有,这使得更改构造函数更加困难。
我希望代码像这样工作,但不明白它是如何与 GIN 一起工作的:
@Singleton
public class ApplicationData {
public AppInfo getAppInfo() {
return new AppInfo("My App Info");
}
}
public class MyClass{
@Inject protected ApplicationData applicationData;
public void someMethod() {
doSomething(applicationData.getAppInfo());
}
}
其他人对此进行了编码以在 Presenter 中工作,我有点理解它为什么起作用,但我并不完全掌握这些概念。他们不再四处询问。
这是我拥有的一个hack,它可以工作,但我只是不喜欢它:
@GinModules(GinModule.class)
public interface Injector extends Ginjector {
final Injector INSTANCE = GWT.create(Injector.class);
ApplicationData getApplicationData();
}
public class MyWidget extends Composite implements TakesValue<Integer>{
public static interface MyWidgetUiBinder extends UiBinder<FormPanel, MyWidget>}
private MyWidgetUiBinder uiBinder = GWT.create(MyWidgetUiBinder.class);
private ApplicationData appData;
public ArrivalTimeWidget() {
appData = Injector.INSTANCE.getApplicationData();
initWidget(uiBinder.createAndBindUi(this));
someMethod(appData.getAppInfo());
}
}
请帮助我正确地做到这一点,而不是使用黑客。请把我当成傻子一样对待,并给出充分的解释,因为说到这一点,我很傻。