访问Play Singleton方法

时间:2016-11-18 19:00:04

标签: scala playframework playframework-2.5

我有以下Play Singleton:

package p1

@Singleton
class MySingleton @Inject() (system: ActorSystem, properties: Properties) {

    def someMethod = {
         // ........
    }
}

当我尝试从类中访问方法someMethod()时,即使我导入包,我也会收到编译错误,说明找不到该方法。如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

首先,为了访问类的方法,您必须拥有该类的实例。在使用依赖项注入时,需要首先将singleton类注入要使用该方法的类中。所以首先声明类让我们说Foo并使用Guice注释@Inject注入类MySingleton,然后获得类的引用(实例)。您可以使用.

调用someMethod

如果要访问类中的方法,请说Foo。您需要注入课程MySingleton

import p1.MySingleton

class Foo @Inject() (mySingleton: MySingleton) {

  //This line could be any where inside the class.
  mySingleton.someMethod

}

使用Guice字段注入的另一种方法。

import p1.MySingleton

class Foo () {
  @Inject val mySingleton: MySingleton

  //This line could be any where inside the class.
  mySingleton.someMethod

}

答案 1 :(得分:0)

它不是实际的Scala单例,因此您无法静态访问someMethod@Singleton注释告诉DI框架仅实例化应用程序中MySingleton类的一个,以便注入它的所有组件都获得相同的实例。

如果您想使用名为someMethod的类中的Foo,则需要执行以下操作:

class Foo @Inject() (ms: MySingleton) {

   // call it somewhere within the clas
   ms.someMethod()

}