微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。