当我在特质中使用getDb()方法时,我感到困惑,因为我有权访问.withSession。为什么不在.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()返回单位:
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
不再在范围内。
我想你的第二个例子中有另一个错字。你传入'UserDao'类的参数是'DBUtil'类型(注意大写'B'),而你实际上需要'DbUtil'(小写'b')。 – edi
@edi ok修复了这个错别字的错误,但仍然停留在为什么我无法访问.withSession。 – Blankman