Внедрение базы данных Play framework 2.6

#scala #playframework

#scala #playframework

Вопрос:

Я переношу старый проект с play 2.4 на 2.6, и теперь я сталкиваюсь с некоторыми проблемами, связанными с внедрением зависимостей

В этом случае раньше, когда мы использовали import play.api.db.DB we can use DB.withTransaction , но теперь это невозможно, я пытался внедрить db: Database в свой класс, но у меня нет никакого эффекта, чтобы использовать db in my trait.

 class Device (
  val id:String,
  val secret:String,
  val name:Option[String]) extends DeviceBehavia {

  override def hashCode(): Int = id.hashCode

  override def equals(obj: scala.Any): Boolean = obj match {
    case obj:Device => obj.id == this.id
    case _ => false
  }
}

object Device extends DeviceBuilder {
}

trait DeviceBehavia {
  self : Device =>

  def insert():Device = {
    db.withTransaction { implicit c =>
      SQL(
        """
         insert into device(id, secret)
         values ({id}, {secret})
        """
      ).on('id -> id, 'secret -> secret).execute()

      platformInfo.insertWithConnection(this)
      this
    }
  }
}
 

каков правильный способ добавить внедрение зависимостей, например @Inject () (db: Database), в этот класс и иметь возможность использовать его по моей черте, заранее благодарю.

Комментарии:

1. def db: DB реализовано подклассом с использованием DI

2. @cchantep спасибо, но в этом случае у меня есть 2 проблемы: 1 — мой класс должен быть абстрактным «класс Device должен быть абстрактным, поскольку метод db в черте DeviceBehavia типа => play.api.db.Database не определен» и 2 — создание объекта невозможно, поскольку метод dbв черте DeviceBuilder типа => play.api.db.Database не определено

3. , что соответствует

4. @cchantep но таким образом мой класс не может быть создан:(

5. либо вам нужен Database экземпляр, либо нет, но он не может появиться волшебным образом.