当我在特征中使用getDb()方法时,我对访问.withSession感到困惑。
trait BaseDao{
private lazy val db = {
DatabaseAccess.databases("db.default")
}
def getDb() = db
}
class UserDao extends BaseDao {
def getById(id: Int): User = {
getDb().withSession { implicit session =>
return ...
}
}
}
但是当我注入一个具有相同getDb()方法的类时,我没有.withSession
可用,它说getDb()返回Unit:
class DbUtil {
private lazy val db = {
DatabaseAccess.databases("db.default")
}
def getDb() = db
}
class UserDao(dbUtil: DbUtil) {
def getById(id: Int): User = {
dbUtil.getDb() ??? // .withSession isn't in scope
}
}
我想从用户转移到传递DBUtil的特性,但是当我尝试时,.withSession
不再在范围内了。
答案 0 :(得分:0)
从您的第二个示例开始,getDb()
超出范围,因为它是在DbUtil
类上定义的。
因此,如果您想访问该方法,则需要在dbUtil
实例上调用它:
class UserDao(dbUtil: DBUtil) {
def getById(id: Int): User = {
dbUtil.getDb().withSession { implicit session => ... }
}
}
答案 1 :(得分:0)
以下代码适用于我。
class Database {
def withSession() {}
}
object DatabaseAccess {
var databases: Map[String, Database] = Map()
}
class DbUtil {
private lazy val db = {
DatabaseAccess.databases("db.default")
}
def getDb() = db
}
class UserDao(dbUtil: DbUtil) {
def getById(id: Int) = {
dbUtil.getDb().withSession()
}
}
可能是你的IDE出了问题。您是否测试过代码是否编译?