0

我已经阅读了大量的 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());
   }
}

请帮助我正确地做到这一点,而不是使用黑客。请把我当成傻子一样对待,并给出充分的解释,因为说到这一点,我很傻。

4

1 回答 1

0

答案是,正如@Thomas Broyer 所说,我只能从自己被注入的对象中注入。我正在创建“新”对象而不是注入它们。

于 2013-09-19T17:37:30.017 回答