J'ai un contrôleur WebSocket
qui crée par gestionnaire d'acteur de connexion:Comment Injecter() dans une classe avec les paramètres du constructeur?
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
}
}
}
Et dans le gestionnaire d'acteur que je dois travailler avec 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"
}
Ainsi, la manière habituelle est de @Inject (UsersCollection
dans la classe cible. Mais je ne peux pas faire quelque chose comme:
class WebSocketActor @Inject()(out: ActorRef, users: UsersCollection) extends Actor { ... }
Parce que les instances de l'acteur crée à l'intérieur WebSocketActor
objet compagnon:
object WebSocketActor {
def props(out: ActorRef) = Props(new WebSocketActor(out))
}
Comment utiliser UsersCollection
à l'intérieur du WebSocketActor
?
Est-ce que cela peut être lié? https://stackoverflow.com/q/45774470/1080523 – rethab