【发布时间】:2016-08-16 08:20:56
【问题描述】:
首先感谢大家抽出一些时间来查看我的问题。我是 scala 生态系统的新手,所以我认为我混淆了一些概念。
我在 Play 2.4 项目中引入 Guice,它在一些 REST 控制器中运行。我已编辑 build.sbt 以附加 routesGenerator := InjectedRoutesGenerator 作为 Play 官方文档建议并编辑了我的路线,如下例所示:
GET /socket @com.letgo.chat.controllers.ChatController.socket
我的注入 actor 的模块如下所示:
class ChatModule extends AbstractModule with ScalaModule with AkkaGuiceSupport with GuiceAkkaActorRefProvider {
override def configure() {
bindActor[TalkerProviderActor](TalkerProviderActor.name)
...
所有这些似乎都在起作用。
但另一个端点使用 Play 方法 WebSocket.acceptWithActor 处理 websocket。我需要创建一个actor,它也需要一些依赖项。
控制器创建一个ConnectionActor:
class ConnectionActor(
@Assisted() websocket: ActorRef,
monitoring: Monitoring,
@Named(BouncerActor.name) bouncer: ActorRef,
) extends Actor
...
class ChatController @Inject() extends Controller {
def socket(): WebSocket[String, JsValue] = WebSocket.acceptWithActor[String, JsValue] { request => out =>
// I had the following statement in order to build the actor before introducing Guice:
// ConnectionActor.props()
// Now, I need some magic here
}
}
如您所见,我需要一个 websocket: ActorRef 用于 websocket 输出。
我使用AkkaGuiceSupport提供的bindActorFactory方法在应用程序的其他部分创建了一些actor:
bindActorFactory[TalkerActor, TalkerActor.Factory]
但我不知道在这种情况下我应该如何创建一个处理 websocket 的参与者。你们能帮帮我吗?
谢谢
【问题讨论】:
标签: scala playframework playframework-2.0 akka guice