如何在 play framework2.5 中的对象中正确注入 play.api.Configuration ?



我正在升级到玩框架 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
}

并从这里configtest对象中设置。

因此,您的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

最新更新