2016-07-14 4 views
1

У меня есть Акк Актер в моем приложении Play, который получает доступ к конфигурации Play с использованием теперь устаревшего метода.Доступ к конфигурации 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? Я мог передать конфигурацию актеру во время строительства или просто иметь отдельный файл конфигурации для актеров, но оба выглядят довольно взломанными. Есть ли предпочтительный метод, используя 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) через DI: SomeOtherClass.scala

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

идеально благодаря! – awfulHack

1

Ответ на ману выше указывает на самый элегантный способ использования DI в сочетании с актерами в игре, но в любом Актера вы можете найти конфигурацию как:

context.system.settings.config 
Смежные вопросы