#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
реализовано подклассом с использованием DI2. @cchantep спасибо, но в этом случае у меня есть 2 проблемы: 1 — мой класс должен быть абстрактным «класс Device должен быть абстрактным, поскольку метод db в черте DeviceBehavia типа => play.api.db.Database не определен» и 2 — создание объекта невозможно, поскольку метод dbв черте DeviceBuilder типа => play.api.db.Database не определено
3. , что соответствует
4. @cchantep но таким образом мой класс не может быть создан:(
5. либо вам нужен
Database
экземпляр, либо нет, но он не может появиться волшебным образом.