我对戏的文档https://www.playframework.com/documentation/2.5.x/ScalaAkka阶打2.5和依赖注入演员
望着例子有点困惑,人们可以从一个控制器开始一个演员:
import play.api.mvc._
import akka.actor._
import javax.inject._
@Singleton
class Application @Inject() (system: ActorSystem) extends Controller {
val actor = system.actorOf(Props(classOf[AnActor], "anActor")
//...
}
或者一个可以依靠在吉斯实例化的演员
import com.google.inject.AbstractModule
import play.api.libs.concurrent.AkkaGuiceSupport
import actors.ConfiguredActor
class MyModule extends AbstractModule with AkkaGuiceSupport {
def configure = {
bindActor[AnActor]("anActor")
}
}
当演员是由吉斯实例化,可以注入的依赖进去
import akka.actor._
import javax.inject._
import play.api.Configuration
class AnActor @Inject() (configuration: Configuration) extends Actor {
//...
}
然而,从控制器开始是演员引发
[IllegalArgumentException: no matching constructor found on class AnActor for arguments []]
是否有办法注入一个服务到非吉斯实例化的演员?
你可以在'Application'中注入'Configuration',然后将其作为参数提供吗?然后演员的创作就会成为'val actor = system.actorOf(Props(new AnActor(configuration)),“anActor”)' – Eric
是的,这就是我现在所做的。但是,这看起来不太优雅。此外,我的最终目标是将服务注入到子actor中,并且我想避免将它们作为构造函数的参数传递给构造函数。 – david
我明白了。我不确定这是否可行,但[AssistedInject](https://github.com/google/guice/wiki/AssistedInject)可能会有所帮助。 – Eric