玩2.0 Scala-访问全局对象
我声明了一个在应用程序启动时实例化的对象。我想在控制器中访问它,它是插件的一部分。我希望能够使用该插件,但我似乎无法通过第一部分——查找玩2.0 Scala-访问全局对象,scala,global,sbt,playframework-2.0,Scala,Global,Sbt,Playframework 2.0,我声明了一个在应用程序启动时实例化的对象。我想在控制器中访问它,它是插件的一部分。我希望能够使用该插件,但我似乎无法通过第一部分——查找MyWebsocketConnection对象。这些例子都没有说明如何做到这一点。我不想注入控制器,因为我正在编写一个插件(我在某处看到了如何实现这一点的静态示例) Global.scala,插件应用程序\app\Global.scala object Global extends GlobalSettings { object MyWebsocketCo
MyWebsocketConnection
对象。这些例子都没有说明如何做到这一点。我不想注入控制器,因为我正在编写一个插件(我在某处看到了如何实现这一点的静态示例)
Global.scala
,插件应用程序\app\Global.scala
object Global extends GlobalSettings {
object MyWebsocketConnection {
val logger = // return something that gets instantiated once, like websocket object for logging to ui
}
class MyWebsocketConnection {
import MyWebsocketConnection.logger
}
override def onStart(app: Application) {
Logger.info("Application has started...");
}
}
我的自定义日志插件控制器:
MyLogger.Scala
,插件应用程序\app\controllers\MyLogger.Scala
object MyLogger {
def info(message: String) = {
// THIS CAN'T BE FOUND ?
// MyWebsocketConnection.logger.send(message)
}
}
所以,从这出戏开始!引用插件的2.0应用程序,我(可能)会执行以下操作,但在此之前我甚至无法通过该部分:
MyFutureController.scala
,又一出戏!application\app\Controller\MyFutureController.scala
object MyFutureController extends Controller {
def someRandomMethod = Action {
// Custom logging
MyLogger.info("Here's my log message!");
Ok("This documentation stinks!")
}
}
问题是您的
全局
对象驻留在默认包中。在Java中,默认包中的类不能从其他包中引用,它们只能在同一个包中访问(默认)
我认为这个问题有两种解决办法
MyWebsocketConnection
移动到某个命名包(比如config
)中,以便在应用程序中访问它
object MyLogger {
def info(message: String) = {
config.MyWebsocketConnection.logger.send(message)
}
}
Global
对象将驻留在foo
包中,并可在应用程序中访问object MyLogger {
def info(message: String) = {
config.MyWebsocketConnection.logger.send(message)
}
}
还有一个解决方法#3:将全局类移动到包中,并在application.conf文件中指定其完全限定名,如下所示:
全局=my.packaged.global
默认值是
application.global=…
。您是对的,它应该是global=…
而不使用应用程序。