2016-07-14 39 views
1

我的Play应用中有一个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 { 

我的类就不会编译和compler回报:“类文件标注的参数有作为命名的参数要提供”

我认为你可以只有DI是控制器类中的配置。那么,是否有可能通过Play应用程序从Akka Actore内部访问配置?我可以在构建过程中将配置传递给演员,或者为演员配置一个单独的配置文件,但这两个配置文件看起来都非常黑。有使用Play api的首选方法吗?

谢谢!

回答

1

这是工作在我的项目:

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 { 
... 
} 

然后你甚至可以注入是非常的演员到其他类(在@Named()是可选如果您只有一个Actor配置)通过DISomeOtherClass.scala

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

完美谢谢! – awfulHack

1

以上的法力答案指出了与播放的演员组合使用DI最优雅的方式,但任何演员中,你可以找到喜欢的配置:

context.system.settings.config