从 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
我的 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