【问题标题】:Injecting 3rd Party libraries w/ Guice @Provides使用 Guice @Provides 注入第 3 方库
【发布时间】:2014-04-22 20:46:35
【问题描述】:

我正在尝试创建一个 Guice 2 模块来使用 @Provides 方法包装第三方 API。问题是我不确定如何正确绑定到 @Provides 方法。第三个库没有为其单例公开接口,所以我只是调用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 ;
    }

}

【问题讨论】:

    标签: dependency-injection guice roboguice


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,杰夫。你很准。我最初尝试不使用 bind 语句,但我的代码中有错误,误导我认为它们是必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多