WebSocket.acceptWithActor
instantiates một diễn viên Akka mới mà không sử dụng Guice.WebSocket.acceptWithActor và @Inject() trong diễn viên (Play 2.5)
Với Play 2.4, sử dụng bộ phun cho diễn viên của tôi vẫn có thể bằng cách nhập play.api.Play.current
.
Snippet từ ReactiveMongo documentation:
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))
}
Nhưng trong Chơi 2.5, play.api.Play.current
bị phản đối. Tôi vẫn có thể tiêm ReactiveMongoApi
vào diễn viên của mình bằng cách nào? Cách được khuyến nghị sử dụng một thể hiện của ReactiveMongoApi
trong diễn viên của tôi là gì?
Đây là mã của tôi mà làm việc với Play 2.4 vì tùy chỉnh của tôi diễn viên lớp ClientActor
có quyền truy cập vào ReactiveMongoApi
qua 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)
}
}