【问题标题】:Scala Play DI issue: Cannot inject into field of class or objectScala Play DI 问题:无法注入类或对象的字段
【发布时间】:2018-05-22 14:33:06
【问题描述】:

我的项目结构类似:

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.scalaAuthenticationComponent.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,但在 Filters 的情况下它是错误的。同样的情况是,当我尝试注入 scala 对象时,我也收到了 null。

有什么想法吗?

【问题讨论】:

    标签: scala dependency-injection playframework guice


    【解决方案1】:

    我不建议混合使用字段和构造函数注入。将其移至构造函数参数,它可能会起作用。

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 2017-09-29
      • 2019-10-22
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多