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

我试过做这样的事情:

@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; } ......... } 

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

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

 private final MyGinjector injector = GWT.create(MyGinjector.class); injector.getAAA() and so on.. 

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

谢谢

你可以使用Guice的injectMembers特性,它在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注释您的EntryPoint:除非您将其注入另一个类(并且您必须求助于将其绑定到GWT创建的实例,而不是让GIN创建自己的实例) ,你的应用程序中只有一个EntryPoint实例。

GIN取决于GWT,因此GIN知道GWT,但GWT不知道GIN。

因此,通过GWT.create(AAA.class)初始化类将以正常的GWT方式初始化AAA,而不使用GIN,这意味着没有dependency injection。

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