我尝试使用Guice配置数据库客户端实例来创建AbstractModule,但我无法使用依赖注入来访问application.conf,因为尚未创建注入器。
这是我的代码
@Singleton
public class DatastoreModule extends AbstractModule {
@Inject
private Config config;
@Override
public void configure() {
MongoClient mongo = new MongoClient(
config.getString("mongodb.host"),
config.getInt("mongodb.port")
);
Morphia morphia = new Morphia();
Datastore datastore = morphia.createDatastore(
mongo,
config.getString("mongodb.databaseName")
);
bind(Datastore.class).toInstance(datastore);
}
}
如何在不使用已弃用的Play.configuration API的情况下访问配置?
答案 0 :(得分:1)
您可以在构造函数中传递它(在Scala中)。这是我项目的例子
class Guard(environment: Environment, configuration: Configuration) extends AbstractModule{
在Java中它是相同的:
public class DatastoreModule extends AbstractModule {
private final Environment environment;
private final Config config;
public DatastoreModule(Environment environment, Config config) {
this.environment = environment;
this.config = config;
}
...
}
更多详情:https://www.playframework.com/documentation/2.6.x/JavaDependencyInjection#Configurable-bindings
不要过度使用它:
在大多数情况下,如果在创建组件时需要访问Config,则应将Config对象注入组件本身或组件的Provider中。然后,您可以在创建组件时阅读Config。在为组件创建绑定时,通常不需要读取Config。
我很少使用它。将配置注入组件本身总是好的。