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

How to inject correctly the play.api.Configuration inside an object in play framework2.5?

我正在升级到 play framework 2.5,我有一些对象很难将它们变成 类 以便使用依赖注入,所以我改用了这个方法:

object test {
@Inject var config: Configuration = _
def portNumber = config.getInt("server.port")
}

但是在运行时我得到了空指针异常,旧代码曾经是这样的:

object test {
def portNumber = Play.configuration.getInt("server.port")
}

但是它已经过时了,我必须用 DI 来改变它。 如果我有 trait 而不是 对象

您可以在单例中设置配置,例如:

@Singleton
class ConfigForTest @Inject()(config: Configuration) {
  test.config = config
}

并在 test 对象中从这里 config 设置。

所以你的 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 直接来自类路径。

另一种方法是

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