我正在升级到玩框架 2.5,我有一些对象很难将它们转换为类以使用依赖注入,所以我改用了这种方法:
object test {
@Inject var config: Configuration = _
def portNumber = config.getInt("server.port")
}
但是在运行时我得到了空指针异常,旧代码曾经是这样的:
object test {
def portNumber = Play.configuration.getInt("server.port")
}
但它被取消了,我必须用 DI 更改它。 另一个即时问题,如果我有一个特征而不是一个对象,是否有可能相同
另一种方法是
import com.typesafe.config.ConfigFactory
val restConfig = ConfigFactory.load("rest.conf") //your conf file
val pageSize = restConfig.getInt("pagesize") //the value you want from conf file
您可以在单例中设置配置,例如:
@Singleton
class ConfigForTest @Inject()(config: Configuration) {
test.config = config
}
并从这里config
test
对象中设置。
因此,您的test
对象如下所示:
object test {
var config: Configuration = _
def portNumber = config.getInt("server.port")
}
不要忘记初始化Module
中的Singleton
:
class Module
extends AbstractModule {
@Override()
override def configure(): Unit = {
bind(classOf[ConfigForTest])
.asEagerSingleton()
...
或者正如Shweta所显示的那样,无需任何注射即可进行。当您有一个 Play 应用时,这就足够了:
import com.typesafe.config.ConfigFactory
object test {
val portNumber = ConfigFactory.load().getInt("server.port")
}
这直接从类路径中获取application.conf
。