试图实例化命名(注释)类

时间:2016-02-22 16:13:05

标签: scala dependency-injection guice playframework-2.4 named

首先,感谢您尝试回答问题的任何努力。 从当前的应用程序注入器(play.api.Play.current.injector),如何获取类的命名实例? 我试图将注入器转换为ScalaInjector(net.codingwell.scalaguice.InjectorExtensions.ScalaInjector)和Guice Injector(com.google.inject.Injector),两者都不成功。 问题是实例化一个类只有3种方法,所有这些方法都被重载了instanceOf [T]

2 个答案:

答案 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 也应该起作用。