我有以下Play Singleton:
package p1
@Singleton
class MySingleton @Inject() (system: ActorSystem, properties: Properties) {
def someMethod = {
// ........
}
}
当我尝试从类中访问方法someMethod()
时,即使我导入包,我也会收到编译错误,说明找不到该方法。如何解决这个问题?
答案 0 :(得分:2)
首先,为了访问类的方法,您必须拥有该类的实例。在使用依赖项注入时,需要首先将singleton类注入要使用该方法的类中。所以首先声明类让我们说Foo
并使用Guice注释@Inject注入类MySingleton
,然后获得类的引用(实例)。您可以使用.
如果要访问类中的方法,请说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()
}