GIN将@Singleton注入小部件字段

时间:2013-03-28 16:11:29

标签: gwt dependency-injection gin

我已经阅读了一堆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());
   }
}

请帮我正确地执行此操作,而不是使用黑客攻击。请对我说,就像我是愚蠢的,有充分的解释,因为谈到这一点,我是愚蠢的。

1 个答案:

答案 0 :(得分:0)

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