2017-10-13 1 views
0

Module 클래스 내에서 Play Framework 2.5가 사용하는 기본 배우 시스템에 액세스해야합니다.모듈 내에서 Play 2.5에 사용 된 액터 시스템에 액세스하는 방법

나는이를 얻을 수 ActorSystemProvider의 방법이 있음을 참조하십시오

@Singleton 
class ActorSystemProvider @Inject()(environment: Environment, configuration: Configuration, applicationLifecycle: ApplicationLifecycle) extends Provider[ActorSystem] { 
    private val logger = Logger(classOf[ActorSystemProvider]) 

    lazy val get: ActorSystem = { 
    val (system, stopHook) = ActorSystemProvider.start(environment.classLoader, configuration) 
    applicationLifecycle.addStopHook(stopHook) 
    system 
    } 
} 

하지만 어떻게 내가 내 Module 클래스이 클래스에 대한 액세스 권한을받을 수 있나요? 예를 들어

:

class Module extends AbstractModule { 
    val playSystem: ActorSytem = ??? 
    ... 
} 
+0

무엇이 필요합니까? – rethab

+0

Map [String, ActorRef]이 필요하고 Module 클래스에 내장 될 서비스 객체가 있으므로 배우를 만들고지도를 작성하려면 배우 시스템이 필요합니다. 그리고 contstructor/소품 방법. 그래서 함수 시그니처와 일치하는 메서드를 가지고 있지만 액터의 props 메서드에만 함수를 전달하는 클래스를 만듭니다. 이것은 Module 클래스에서 매우 쉽게 이루어 지지만 배우 시스템이 필요합니다. –

+0

그렇다면 모듈에서 배우를 시작해야한다는 것을 의미합니다. 이는 분명히 아이디어가 아닙니다. 모듈은 기본적으로 코드에서의 바인딩에 대한 설명입니다 (다른 것들은 XML로합니다). 이것은 그러한 코드를 포함하기위한 것이 아닙니다. 나는 어떻게 든 그것을하려고 노력할 것이다. 아마'ActorSystem'을 받아서이'Map [String, ActorRef]'를 생성하는 어떤 타입의 팩토리 (또는 심지어'javax.inject.Provider')일까요? – rethab

답변

1

당신은 단순히 구성 요소 생성자의로를 주입하여 actorSystem에 액세스 할 수 있습니다. 놀이로 만들어진 actorSystem에 액세스 할 수 있으며 제공자 체조를 수행 할 필요가 없습니다.

예를 들어, 내 HomeController에서 액터 시스템에 액세스 할 수 있어야합니다. 그래서, 저는 그냥 내 HomeController 생성자에 삽입합니다.

class HomeController @Inject() (actorSystem: ActorSystem) extends Controller { 
    def index = Ok("bye!") 
} 
관련 문제