使用GIN在GWT中注入入口点类

adg*_*gfs 1 java gwt gwt-gin dependency-injection

我试过这样的事情:

@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;
}
.........
}
Run Code Online (Sandbox Code Playgroud)

结果对所有实例都为null ..我希望这种方式工作......

我知道我可以做这样的事情

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

injector.getAAA()
and so on..
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Tho*_*yer 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);
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你不需要用以下内容注释你的EntryPoint @Singleton:除非你把它注入另一个类(并且你不得不求助于hacks将它绑定到GWT创建的实例,而不是GIN创建自己的实例),你应用程序中只有一个EntryPoint实例.