2017-10-13 150 views
0

我需要訪問Play Framework 2.5在我的Module類中使用的默認actor系統。如何從模塊中訪問Play 2.5中使用的actor系統

我看到有上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類中構建,所以我需要這個actor系統來創建這個actor並且構建這個map,並且我有一個在contstructor /道具方法。所以我創建了具有與函數簽名匹配的方法的類,但只將函數傳遞給actor的props方法。這在Module類中很容易完成,但需要演員系統。 –

+0

這將意味着你不得不在你的模塊中啓動演員,這當然不是主意。一個模塊基本上是對代碼中的綁定的描述(其他人使用XML)。這並不意味着包含這樣的代碼。我會盡力去做別的。也許某種類型的工廠(甚至是'javax.inject.Provider')需要一個'ActorSystem'併產生這個'Map [String,ActorRef]'? – rethab

回答

1

您可以通過簡單地將其注入任何組件構造函數的訪問actorSystem。您可以訪問由玩家創建的actorSystem,並且您不需要執行任何提供者操作。

例如,我需要actor系統才能在我的HomeController中訪問。所以,我只是注入到我的HomeController構造函數中。

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