访问 Play Singleton 方法

Accessing Play Singleton methods

我有以下 Play Singleton:

package p1

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

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

当我尝试从 class 访问方法 someMethod() 时,甚至当我导入包时,我都会收到一个编译错误,提示找不到该方法。如何解决这个问题?

首先,为了访问 class 的方法,您必须拥有 class 的实例。当您使用依赖注入时,您需要先将单例 class 注入到要使用该方法的 class 中。所以首先声明 class 让我们说 Foo 并使用 Guice 注释 @Inject 注入 class MySingleton 然后一旦你得到 [=23= 的引用(实例) ].您可以使用 .

调用 someMethod

如果您想访问 class 中的方法,请说 Foo。您需要注入 class 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

}

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

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

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

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

}