0
我们有几个使用数据库会话进行初始化的特征/类/案例类(我们在MySql上使用Slick,所以下面的所有Sessions
都有类型scala.slick.session.Session
)。正在初始化特征的方法已经有了一个开放的数据库会话,所以我希望能够将这个特性传递给初始化时使用的特征;但是,一旦特质初始化,会话将自动关闭,因此我不希望特质持续关闭对会话的引用,以消除我们不小心尝试使用它的可能性。使用封闭的数据库会话来初始化特征
trait MyTrait {
private def initField1(implicit session: Session) = // init code
val field1 = db withSession { implicit sesssion: Session => initField1 }
}
def initMyTrait(implicit session: Session) = new MyTrait {}
这是我的代码目前的样子 - 我无法找到通过initMyTrait
的会话MyTrait
的好办法,所以我需要打开一个第二届初始化MyTrait.field1
。我可以做类似
trait MyTrait {
private val _session: Session
private def initField1(implicit session: Session) = // init code
val field1 = initField1(_session)
}
def initMyTrait(implicit session: Session) = new MyTrait { private val _session = session }
但这将在MyTrait
初始化