我正在尝试使用@Provides方法创建一个Guice 2模块来包装第三方API。问题是我不确定如何正确绑定到@Provides方法。第3个库没有公开其单例的接口,所以我只是调用bind(ThirdPartySingleton.class)
。
Guice抱怨类似于以下错误:
Could not find a suitable constructor in ThirdPartySingleton1
我知道我可以为每个第三方单身人士使用单独的Provider<>
,但如果可能的话,我想使用简洁的@Provide方法。
public class ThirdPartyModule extends AbstractModule {
public ThirdPartyModule() {
}
@Override
public void configure() {
bind(ThirdPartySingleton1.class);
bind(ThirdPartySingleton2.class);
}
@Provides
@Singleton
ThirdPartySingleton1 provideThirdPartySingleton1(){
return ThirdPartySingleton1.getInstance();
}
@Provides
@Singleton
ThirdPartySingleton2 provideThirdPartySingleton2() {
ThirdPartySingleton2 singleton2 = ThirdPartySingleton2.getInstance();
singleton2 .setParam1( "param1");
singleton2 .setParam2( "param2");
return singleton2 ;
}
}
答案 0 :(得分:2)
这似乎是正确的,但你并不需要bind
语句:它告诉Guice使用无法参与的公共构造函数来构造实例,而它无法找到。你的@Provides ThirdPartySingleton1
告诉Guice它需要知道的一切。
您仍然需要configure
方法,因为它是抽象的,但您可以将其留空或在其中添加注释。