1

我试图做这样的事情:

@Singleton
public class AAA implements EntryPoint, HistoryListener
{

private BBB bbb;
private CCC ccc;
private DDD ddd;
private EEE eee;

@Inject
public AAA(BBB bbb, CCC ccc, DDD ddd, EEE eee)
{
  this.bbb = bbb;
  this.ccc = ccc;
  this.ddd = ddd;
  this.eee = ee;
}
.........
}

结果对所有实例都是空的。我希望这种方式可以工作......

我知道我可以做这样的事情,例如

private final MyGinjector injector = GWT.create(MyGinjector.class);

injector.getAAA()
and so on..

为什么我尝试的第一种方法对我不起作用?有什么建议么?

谢谢

4

2 回答 2

7

您可以使用injectMembersGuice 的功能,在 GIN 中,这是通过在您的 Ginjector 中声明一个采用单个参数的方法来完成的。

@GinModules(...)
interface MyGinjector extends Ginjector {

   public void injectEntryPoint(AAA entryPoint);

   ...
}

public class AAA implements EntryPoint {
   @Inject private BBB bbb; // field injection works
   private CCC ccc;

   @Inject void setCcc(CCC ccc) { this.ccc = ccc; } // and of course method injection

   public onModuleLoad() {
      MyGinjector injector = GWT.create(MyGinjector.class);
      injector.injectEntryPoint(this);
      ...
   }
}

顺便说一句,您不需要用@Singleton: 注释您的入口点,除非您将其注入另一个类(并且您必须求助于黑客将其绑定到 GWT 创建的实例,而不是让 GIN 创建自己的实例),您'在您的应用程序中只有一个 EntryPoint 实例。

于 2011-06-28T08:58:38.987 回答
3

GIN 依赖于 GWT,所以 GIN 知道 GWT,但 GWT 不知道 GIN。

因此,通过初始化您的类GWT.create(AAA.class)将以普通 GWT 方式初始化 AAA,没有 GIN,这意味着没有依赖注入。

要进行依赖注入,您需要使用注入器(如上所述)通过 GIN 初始化您的类。

于 2011-06-27T15:59:15.667 回答