Проблема DI Scala Play: невозможно вставить в поле класса или объекта - PullRequest
0 голосов
/ 22 мая 2018

Мой проект имеет аналогичную структуру:

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
  }
}

Итак, когда я звоню getAuthUtil из AuthenticationComponent , он говорит, что authUtil равен нулю,но в случае Filters это неверно.Та же самая ситуация, когда я пытаюсь ввести объект scala, я также получаю ноль.

Есть идеи?

1 Ответ

0 голосов
/ 31 мая 2018

Я не рекомендую смешивать поле и конструктор.Переместите его в параметр конструктора, и он, вероятно, будет работать.

...