访问 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()
}
我有以下 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= 的引用(实例) ].您可以使用 .
如果您想访问 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()
}