使用 Guice 注入初始化库时如何传递参数?

问题描述

我有一个允许连接到数据库的库模块。对于依赖注入,我在我的模块中使用了 Guice。然后服务将使用此模块连接到数据库。在我的库模块中,我有一个看起来像这样的类。

public class DatabaseDAO {
    

    @Inject
    private DatabaseClient dbclient;

    public CreateIndexResponse createIndex(final CreateIndexData createIndexData) throws IOException {
        return dbclient.create(createIndexData)
    }

    public DBIndexResponse indexDocument(final String indexName,final String jsonDocument) throws IOException {
        return dbclient.index(indexName,jsonDocument);
    }

}

然后通过 Guice 提供程序注入上面的 dbClient 对象,如下所示在我的 Guice 模块类中。

public class DatabaseModule extends AbstractModule {
    private static final String SERVICE_NAME = "myService";
    private static final String ENDPOINT = "myEndpoint";

   
    @Override
    protected void configure() {
        bind(DatabaseDAO.class).toInstance(new DatabaseDAO());
    }

    @Provides
    @Singleton
    DatabaseClient provideDBClient(final CredentialsProvider credentialsProvider) {
        SomeObject someObject = doSomething(credentialsProvider,SERVICE_NAME,ENDPOINT);
        return new DatabaseClient(someObject);
    }
}

目前我在 DatabaseModule 中保留了 SERVICE_NAME 变量和 ENDPOINT 变量,但是我希望使用这个库的服务插入它们。按照代码现在的方式,服务将启动DatabaseDAO,如下所示。

 Injector injector = Guice.createInjector(new DatabaseModule());
 dbDAO = injector.getInstance(DatabaseDAO.class);

但是,当服务像上面一样创建注入器时,我想传递这些变量的值,以便使用库的人可以控制。我如何使用 Guice 实现这一目标?任何帮助和指导将不胜感激。预先非常感谢您。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)