我正试图用这些代码行将枚举放入ginjector中:
ClientGinjector.java
MyEnum getMyEnum();
ClientModule.java
bind(MyEnum.class).in(Singleton.class);
但是当我尝试编译时,我收到以下错误:
[错误]注入bla.blup.MyEnum时出错:无法创建或继承 binding:绑定请求常量键'bla.blup.MyEnum'但不是 发现了明确的绑定
有人可以帮助我吗?
答案 0 :(得分:1)
必须在GinModule中显式绑定常量(基本类型,字符串,类或枚举)(使用bindConstant()或bind())(因为没有合理的默认值,GIN会注入)。
该文件是请求绑定的位置(即声明依赖关系的位置)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。