GWTP绑定枚举



我试图把一个枚举放入ginjector与这些代码行:

ClientGinjector.java

MyEnum getMyEnum();

ClientModule.java

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

但是当我试图编译时,我得到以下错误:

[ERROR]注入bla.blup.MyEnum错误:无法创建或继承binding:请求绑定常量键bla.blup。MyEnum'但是没有发现显式绑定

有谁能帮帮我吗?

一个常量(基本类型,String, Class或enum)必须在GinModule中显式绑定(使用bindConstant()或bind())(因为没有合理的默认值可以让GIN注入)。

这就是GIN告诉你的。

该文件是请求绑定的位置(即声明依赖项的位置),而GIN无法执行。

不能构造枚举类,它的唯一有效实例是枚举值。这意味着你必须绑定一个特定的枚举值,该值将被注入到该枚举类型的任何字段或参数中。

Guice/GIN鼓励你对常量使用绑定注释,这样你就可以根据上下文注入不同的常量值;例如

@Named("foo") @Inject MyEnum myEnum;
–
bindConstant().annotatedWith(Names.named("foo")).to(MyEnum.FOO);

如果你不想使用绑定注释(因为你知道你在整个应用程序中只需要一个枚举值),你不能使用bindConstant(),但你可以使用toInstance:

@Inject MyEnum myEnum;
…
bind(MyEnum.class).toInstance(MyEnum.FOO);

这将只在Guice工作,而不是在GIN,它没有toInstance。在GIN中,您必须使用Provider类或@Provides方法:

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

@Provides
MyEnum provideMyEnum() {
  return MyEnum.FOO;
}

以上两种方法都可以与Guice一起使用。

相关内容

  • 没有找到相关文章

最新更新