我有一个WebSocket
控制器,每个连接的演员处理器创建:如何将注入()到具有构造函数参数的类中?
class WebSocketController @Inject()(cc: ControllerComponents)(implicit exc: ExecutionContext) {
def socket: WebSocket = WebSocket.accept[JsValue, JsValue] { request =>
ActorFlow.actorRef { out => // Flow that is handled by an actor from 'out' ref
WebSocketActor.props(out) // Create an actor for new connected WebSocket
}
}
}
和演员处理我需要ReactiveMongo
工作中:
trait ModelDAO extends MongoController with ReactiveMongoComponents {
val collectionName: String
...
}
class UsersCollection @Inject()(val cc: ControllerComponents,
val reactiveMongoApi: ReactiveMongoApi,
val executionContext: ExecutionContext,
val materializer: Materializer)
extends AbstractController(cc) with ModelDAO {
val collectionName: String = "users"
}
所以,通常的方法是@Inject( )目标类中的UsersCollection
。由于演员的情况下创建内部WebSocketActor
同伴对象
class WebSocketActor @Inject()(out: ActorRef, users: UsersCollection) extends Actor { ... }
:
object WebSocketActor {
def props(out: ActorRef) = Props(new WebSocketActor(out))
}
如何使用UsersCollection
的WebSocketActor
内,但我不能这样做?
可能这是相关的吗? https://stackoverflow.com/q/45774470/1080523 – rethab