【问题标题】:Accessing Singleton values in Play for Scala在 Play for Scala 中访问单例值
【发布时间】:2016-07-10 17:56:12
【问题描述】:

我在 Scala 中定义了以下单例

package main

import javax.inject._

@Singleton
class Properties {
  val timeout = 120
}

如何从其他程序访问它?我尝试了main.Properties.timeout,但它抛出了一个编译错误,提示找不到伴生对象

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    如果您想以您提到的方式访问它:main.Properties.timeout,请改用伴随对象:

    class Properties {
       // ...
    }
    object Properties {
        val timeout = 120
        // ...
    }
    

    使用@Singleton 注释,您必须在某处注入该服务才能使用它。所以是这样的:

    import javax.inject._
    import main.Properties
    
    class SomeService @Inject() (props:Properties)() {
        println(props.timeout)
    }
    

    这里是有关 PlayFramework 的 DI 的文档:https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection - 最新版本(不是 2.0),但这是一个很好的起点。

    【讨论】:

    • 谢谢,什么是首选方法?我需要从属性文件中加载值,并使其在所有应用程序类中都可以访问。
    • 如果值在属性文件中,也许还有另一种方式:通过配置?在较新版本的 Play 中,您必须注入 play 的配置,因此您选择 @Inject。如果你想让它独立于框架,就去@Inject
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多