使用Guice @Provides注入第三方库

时间:2014-04-22 20:46:36

标签: dependency-injection guice roboguice

我正在尝试使用@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 ;
    }

}

1 个答案:

答案 0 :(得分:2)

这似乎是正确的,但你并不需要bind语句:它告诉Guice使用无法参与的公共构造函数来构造实例,而它无法找到。你的@Provides ThirdPartySingleton1告诉Guice它需要知道的一切。

您仍然需要configure方法,因为它是抽象的,但您可以将其留空或在其中添加注释。

相关问题