Scala Play DI问题:无法注入类或对象的字段

时间:2018-05-22 14:33:06

标签: scala dependency-injection playframework guice

我的项目结构相似:

Application
|
|--> /ApplicationA
|   -> /app
|     ->Filters.scala
|     ->AuthenticationComponent.scala
|   -> /build.sbt
| 
|--> /ApplicationB
|   -> /app
|     ->Module.scala
|     ->VanillaAuthenticationUtil.scala
|   -> /build.sbt
|
|-> /conf
|-> /build.sbt

Module.scala 的代码列出:

class Module extends AbstractModule  {
  override def configure(): Unit = {
    bind(classOf[AuthenticationUtil])
      .annotatedWith(Names.named("authUtil"))
      .to(classOf[VanillaAuthenticationUtil]).asEagerSingleton()
  }
}

此外, ApplicationA 不了解 ApplicationB ,而 ApplicationB 依赖于 ApplicationA

Filters.scala AuthenticationComponent.scala 的代码也列出了:

class Filters @Inject()(corsFilter: CORSFilter) extends HttpFilters {
  @Inject
  @Named("authUtil")
  var authUtil:AuthenticationUtil = _
  def filters = Seq(corsFilter, authUtil)
}

class AuthenticationComponent   {
  @Inject
  @Named("authUtil")
  var authUtil:AuthenticationUtil = _
  def getAuthUtil():AuthenticationFilter ={

  println(authUtil == null)
  authUtil
  }
}

因此,当我从 AuthenticationComponent 调用 getAuthUtil 时,它表示authUtil等于null,但是在过滤器的情况下,它& #39;是假的。同样的情况是,当我尝试注入scala对象时,我也会收到空。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我不推荐混合场和构造注入。将它移动到构造函数参数,它可能会工作。