동일한 부모 액터의 인스턴스를 여러 개 만들 수 있지만 다른 액터를 만들 수 있습니다. 나는 이것이 Guice와 가능해야만한다고 생각하지만 해결책을 찾지 못했다. 여기 Scala/Akka/Guice 동적으로 자식 액터 삽입하기
내가 생각하고있는 것입니다 ~컨트롤러 :
class Application @Inject()(@Named(ParentActor.parentActor1) parentActor1: ActorRef,
@Named(ParentActor.parentActor2) parentActor2: ActorRef)
extends Controller {
def index = Action {
parentActor1 ! "Message"
parentActor2 ! "Message"
Ok()
}
}
학부모 배우 :
object ParentActor {
final val parentActor1 = "parentActor1"
final val parentActor2 = "parentActor2"
}
class ParentActor @Inject() (childActor: ActorRef) extends Actor {
def receive = {
case "Message" =>
println(s"ParentActor ${self.path} received message...")
childActor ! "Message"
}
}
자식 배우 A :
class ChildActorA extends Actor {
def receive = {
case "Message" =>
println("ChildActorA received message...")
}
}
아역 배우의 B :
class ChildActorB extends Actor {
def receive = {
case "Message" =>
println("ChildActorB received message...")
}
}
모듈 :
class Modules extends AbstractModule with AkkaGuiceSupport {
override def configure() = {
bindActor[ParentActor](ParentActor.parentActor1)
bindActor[ParentActor](ParentActor.parentActor2)
}
}
내가 뭘 "parentActor1는"ChildActorA의 인스턴스는 "childActor"심판 지점이하고 싶어하는 경우 및 "parentActor2"에 ChildActorB 인스턴스를 가리키는 "childActor"참조가 있어야합니까? Guice와 함께 이것을 달성 할 수 있습니까? 내가 플레이를 사용하지 않는
, 그래서 내가 거기 Guice을 초기화하려면 배우의 시스템을
import akka.actor._
import javax.inject.{Inject, Provider, Singleton}
import com.google.inject.AbstractModule
import net.codingwell.scalaguice.InjectorExtensions._
import com.google.inject.Guice
import com.google.inject.Injector
import scala.concurrent.Await
import scala.concurrent.duration.Duration
object Bootstrap extends App {
val injector = Guice.createInjector(
new AkkaModule(),
new ServiceModule()
)
implicit val system = injector.instance[ActorSystem]
val parentActor1 = system.actorOf(ParentActor.props(ChildActorA.name))
val parentActor2 = system.actorOf(ParentActor.props(ChildActorB.name))
parentActor1 ! "Message"
parentActor2 ! "Message"
system.terminate()
Await.result(system.whenTerminated, Duration.Inf)
}
을 Guice을 초기화하고 부트 스트랩해야
비슷한 달성하기 위해 https://github.com/rocketraman/activator-akka-scala-guice에 따라 몇 가지 코드를 사용하고
당신이'Props' 대신'ActorRef'의 주입을 시도 했 BindingAnnotations을 사용할 수 있다는 생각 해요? – Sergey
@Sergey 당신은 약간 정교 할 수 있 었는가? – Nick
나는 하나의 대체 솔루션이 "소개"라고 불리는 것을 사용하는 것이 겠지요. 그러면 ParentActor가 적절한 하위 배우에게 소개 될 것입니다. 예를 들어, 내 컨트롤러는 "childActor"가 적절한 하위 액터 (ChildActorA 또는 ChildActorB)에 대한 ActorRef 인 "Message (childActor)"와 같은 ParentActor에 메시지를 보냅니다. – Nick