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
初始化