从 Akka Actor 访问 Play 配置

Accessing Play configuration from Akka Actor

我的 Play 应用程序中有一个 Akka Actor,它使用现已弃用的方法访问 Play 的配置。

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 {

我的 class 无法编译,编译器 returns:"classfile annotation arguments have to be supplied as named arguments"

我假设您只能在控制器中进行配置 class。那么,是否可以从 Play 应用程序中的 Akka Actore 中访问配置?我可以在构造期间将配置传递给演员,或者只为演员提供一个单独的配置文件,但两者看起来都很老套。是否有使用 Play api?

的首选方法

谢谢!

这在我的项目中有效:

Module.scala:

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

Actor.scala:

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

然后你甚至可以通过 DI: SomeOtherClass.scala

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

上面 mana 的回答指出了在 Play 中结合使用 DI 和 actors 的最优雅的方式,但是在任何 Actor 中你都可以找到如下配置:

context.system.settings.config