WebSocket.acceptWithActor
不使用 Guice 实例化一个新的 Akka actor。
在 Play 2.4 中,仍然可以通过导入来为我的 actor 使用注入器play.api.Play.current
.
片段来自ReactiveMongo 文档 http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html:
import scala.concurrent.Future
import play.api.Play.current // should be deprecated in favor of DI
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.modules.reactivemongo.ReactiveMongoApi
import play.modules.reactivemongo.json.collection.JSONCollection
object Foo {
lazy val reactiveMongoApi = current.injector.instanceOf[ReactiveMongoApi]
def collection(name: String): Future[JSONCollection] =
reactiveMongoApi.database.map(_.collection[JSONCollection](name))
}
但在 Play 2.5 中,play.api.Play.current
已弃用。我怎样才能继续注射ReactiveMongoApi
在我的演员中?使用实例的推荐方式是什么ReactiveMongoApi
在我的演员中?
这是我的代码,适用于 Play 2.4,因为我的自定义 actor 类ClientActor
可以访问ReactiveMongoApi
通过current.injector.instanceOf[ReactiveMongoApi]
:
@Singleton
class Application @Inject() (system: ActorSystem) extends Controller {
val midiDiscoveryActor = system.actorOf(MidiDiscoveryActor.props, "midi-discovery-actor")
val midiActor = system.actorOf(MidiActor.props(midiDiscoveryActor), "midi-actor")
def index(page: String) = Action {
Ok(views.html.index(page))
}
def bidirectional = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
ClientActor.props(out, midiActor, midiDiscoveryActor)
}
}