GWTP绑定GIN中的枚举

时间:2013-06-19 07:06:56

标签: java gwt compiler-errors gwt-platform gin

我正试图用这些代码行将枚举放入ginjector中:

ClientGinjector.java

MyEnum getMyEnum();

ClientModule.java

bind(MyEnum.class).in(Singleton.class);

但是当我尝试编译时,我收到以下错误:

  

[错误]注入bla.blup.MyEnum时出错:无法创建或继承   binding:绑定请求常量键'bla.blup.MyEnum'但不是   发现了明确的绑定

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

  

必须在GinModule中显式绑定常量(基本类型,字符串,类或枚举)(使用bindConstant()或bind())(因为没有合理的默认值,GIN会注入)。

     

That's what GIN is telling you.

该文件是请求绑定的位置(即声明依赖关系的位置)GIN无法兑现。

答案 1 :(得分:0)

无法构造枚举类,其唯一有效的实例是其枚举值。你必须绑定一个特定的枚举值,该枚举值将被注入该枚举类型的任何字段或参数中。

Guice / GIN鼓励您对常量使用绑定注释,因此您可以根据上下文注入不同的常量值; e.g。

@Named("foo") @Inject MyEnum myEnum;

–

bindConstant().annotatedWith(Names.named("foo")).to(MyEnum.FOO);

如果您不想使用绑定注释(因为您知道在整个应用中只需要一个枚举值),则无法使用bindConstant(),但可以使用{{1} }:

toInstance

这只适用于Guice,而不适用于doesn't have toInstance的GIN。在GIN中,您必须使用@Inject MyEnum myEnum; … bind(MyEnum.class).toInstance(MyEnum.FOO); 类或Provider方法:

@Provides

class MyEnumProvider implements Provider<MyEnum> {
  @Override
  public MyEnum get() {
    return MyEnum.FOO;
  }
}
…
bind(MyEnum.class).toProvider(MyEnumProvider.class);

上述两种方法也适用于Guice。