首先,感谢您尝试回答问题的任何努力。 从当前的应用程序注入器(play.api.Play.current.injector),如何获取类的命名实例? 我试图将注入器转换为ScalaInjector(net.codingwell.scalaguice.InjectorExtensions.ScalaInjector)和Guice Injector(com.google.inject.Injector),两者都不成功。 问题是实例化一个类只有3种方法,所有这些方法都被重载了instanceOf [T]
答案 0 :(得分:7)
对于正常的依赖,你会做
play.api.Play.current.injector.instanceOf[ProjectRepo]
如果要检索命名依赖项,可以执行
val qualifier = Some(QualifierInstance(Names.named("name")))
val bindingKey = BindingKey[ProjectRepo](Class[ProjectRepo], qualifier)
play.api.Play.current.injector.instanceOf[ProjectRepo](bindingKey)
无论如何,您应该只在非常罕见的情况下直接使用注入器,确保没有更简单的方法来检索您的依赖项。
答案 1 :(得分:1)
当您需要注入命名的依赖项(在我的案例中为ActorRef)时,您也可以使用case类来提供帮助:
case class NamedActorHelper @Inject() (@Named("some-actor") actor: ActorRef)
class SomeActorSpec with GuiceOneAppPerSuite {
...
val someActor = app.injector.instanceOf[NamedActorHelper].actor
...
}
用 play.api.Play.current 替换 app 也应该起作用。