【问题标题】:How to inject correctly the play.api.Configuration inside an object in play framework2.5?如何在 play framework2.5 中的对象内正确注入 play.api.Configuration?
【发布时间】:2019-12-17 03:29:08
【问题描述】:

我正在升级到播放框架 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 而不是 object

【问题讨论】:

    标签: scala dependency-injection playframework guice typesafe-config


    【解决方案1】:

    另一种方法是

    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
    

    【讨论】:

    • 它不起作用可能是因为我正在从 scala 文件创建 .conf 文件
    • 在你的播放框架的 yonf 文件夹中创建一个文件然后尝试。
    【解决方案2】:

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

    @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

    【讨论】:

    • 我忘了将它添加到模块中/我还添加了一个没有注入的版本 - 请参阅我编辑的答案。
    • 我会尝试绑定,因为我正在动态创建 application.conf 文件,这意味着它是一个 scala 文件
    • 但是你必须确保 Singleton 不会被调用得太早!
    • 如果我有一个 Trait 而不是一个对象呢?
    • 感谢 Stackoverflow 支持并接受答案 - 也比写评论要快;)。
    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多