Uygulama başlangıcında başlatılan bir nesne bildirdim. Bir eklentinin parçası olan bir denetleyiciye erişmek istiyorum. Bu eklentiyi kullanabilmek istiyorum, ancak ilk parçayı geçemiyorum - MyWebsocketConnection
nesnesini bulmak. Örneklerin hiçbiri bunun nasıl yapıldığını göstermiyor. Denetleyiciye enjekte etmek istemiyorum çünkü bir eklenti yazıyorum (bunun nasıl yapılacağına dair statik örnekler gördüm). Uygulamayı eklentisi Oynat! 2.0 Scala - Genel nesneye erişme
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...");
}
}
Benim özel günlüğü eklentisi kontrolör: Uygulama \ app \ kontrolörleri \ MyLogger.scala
object MyLogger {
def info(message: String) = {
// THIS CAN'T BE FOUND ?
// MyWebsocketConnection.logger.send(message)
}
}
eklentisi
MyLogger.Scala
, Yani, oyundan! Eklentiyi referans alan 2.0 uygulaması, (muhtemelen) aşağıdaki gibi bir şey yapardım, ama bundan önce parçayı geçemiyorum:
MyFutureController.scala
, başka bir Play! Uygulama \ app \ kontrolörleri sorun Global
nesneler varsayılan paketinde bulunan olmasıdır MyFutureController.scala
object MyFutureController extends Controller {
def someRandomMethod = Action {
// Custom logging
MyLogger.info("Here's my log message!");
Ok("This documentation stinks!")
}
}
Bu en iyi yanıttır. – vaughan
Varsayılan: application.global = ... 'dir. Haklısın, global olmak zorunda değilsin. – samwize