2016-07-14 5 views
1

私はPlayのアプリにAkkaのActorを持っています。これは、現在廃止予定の方法を使ってPlayの設定にアクセスしています。私はこれを行う場合Akkaの俳優からの再生設定へのアクセス

class MyActor (supervisor: ActorRef) extends Actor { 
    val loc = Play.current.configuration.getString("my.location").get 
    def receive = { case _ => } 
} 

:私はあなたができると仮定し

「クラスファイルの注釈の引数は、名前付き引数として供給する必要が」:

import javax.inject._ 
class MyActor @Inject(configuration: play.api.Configuration) (supervisor: ActorRef) extends Actor { 

私のクラスがコンパイルされませんとcompler戻りますコントローラークラス内の構成だけをDIにします。では、Playアプリ内のAkka Actore内から設定にアクセスすることは可能ですか?私は建設中に俳優に設定を渡すか、俳優のための別の設定ファイルを持っているかもしれませんが、どちらもかなりハッキーなようです。 Play APIを使用する方法がありますか?

ありがとうございます!

答えて

1

これが私のプロジェクトに取り組んでいる:

object ExampleActor { 
    def props = Props[ExampleActor] 
} 
@Singleton 
class ExampleActor @Inject()(/*some DI*/) extends Actor { 
... 
} 

そして、あなたはそれからでも@Named()はオプションです(他のクラスにその非常に役者を注入することができます

class ExampleModule extends AbstractModule with AkkaGuiceSupport { 
    override def configure(): Unit = { 
    bindActor[ExampleActor]("example-actor-name") 
    } 
} 

Actor.scala

Module.scala が1つしか設定されていない場合)DISomeOtherClass.scala

@Singleton 
class SomeOtherClass @Inject()(@Named("example-actor-name") exampleActor: ActorRef) { 
    ... 
} 
+0

完璧をありがとう! – awfulHack

1

マナによって答えは上記のプレイ中の俳優との組み合わせでDIを使用するための最もエレガントな方法を指摘するが、任意の俳優の中にあなたのような設定を見つけることができます。

context.system.settings.config 
関連する問題