使用Google Guice向Scala Akka Actors注入服务

我有几个服务要注入akka演员 . 我正在使用三种不同类型的actor,每种类型都使用不同的服务 . 目前我只有一个模块,在actor内部实例化一个注入器,并在每个Crow内部进行绑定 . 问题是,对于彼此,他们会收到一个新的服务实例 .

我做了一点阅读并找到http://www.typesafe.com/activator/template/activator-akka-scala-guice但是akka的文档建议我们不要使用 IndirectActorProducer . 我将这些服务注入演员的最佳方式是什么? @Inject关键字看起来很有希望,但我不确定如何使用它 .

工作流程:

Main创建指挥官,发送命令,指挥官创建三种不同类型的乌鸦,并发送消息执行(这些乌鸦需要服务) .

回答(2)

2 years ago

在您的模块中使用@Provides方法接受服务作为参数并返回ActorRefs . 在这些提供程序方法中,您从注入的服务实例化Props,但让akka实际创建actor,因此您不需要子注入器 .

有关示例,请参阅我对https://stackoverflow.com/a/30901808/1341546的回答 .

2 years ago

我最终使用http://www.typesafe.com/activator/template/activator-akka-scala-guice作为指南 . 我发现它工作得很好,它实际上并没有使用IndirectActorProducer,而是另一个扩展它的类,这也是他们推荐的 .