我已经阅读了一堆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中工作,我有点理解为什么它有效,但我并不完全掌握这些概念。他们不再问了。
这是我所拥有的黑客,它会起作用,但我只是不喜欢它:
@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());
}
}
请帮我正确地执行此操作,而不是使用黑客攻击。请对我说,就像我是愚蠢的,有充分的解释,因为谈到这一点,我是愚蠢的。
答案 0 :(得分:0)
答案是我只能从已注入的对象中注入,正如@Thomas Broyer所说。我正在创建“新”对象而不是注入它们。