我從遊戲中2.3遷移到2.5如何玩依賴注入數據庫2.5
原來我有「DAOFactory」對象
object DAOFactory {
def categoryDAO: CategoryDAO = AnormCategoryDAO
def itemDAO: ItemDAO = AnormItemDAO
def bidDAO: BidDAO = AnormBidDAO
def userDAO: UserDAO = AnormUserDAO
def feedStatsDAO: FeedStatsDAO = AnormFeedStatsDAO
}
,讓我們以「AnormCategoryDAO」作爲一個例子,我必須改變「對象」到「類」
object AnormCategoryDAO extends CategoryDAO {
val category = {
int("id") ~ str("display_name") ~ str("url_name") map {
case id~displayName~urlName => Category(id, displayName, urlName)
}
}
def create(displayName: String, urlName: String) = DB.withConnection { implicit c =>
SQL("INSERT INTO category(display_name, url_name) VALUES({displayName}, {urlName})").on(
'displayName -> displayName, 'urlName -> urlName).executeUpdate()
}
def findById(id: Int): Option[Category] = DB.withConnection { implicit c =>
SQL("SELECT * FROM category WHERE id = {id}").on('id -> id).as(category singleOpt)
}
def findByName(urlName: String): Option[Category] = DB.withConnection { implicit c =>
SQL("SELECT * FROM category WHERE url_name = {urlName}").on('urlName -> urlName).as(category singleOpt)
}
def all(): List[Category] = DB.withConnection { implicit c =>
SQL("SELECT * FROM category ORDER BY display_name").as(category *)
}
}
因此,我改變的對象CLASS和如下面SINGLETON註釋,並且我改變「dB.withConnection」到「db.withConnection」
@Singleton
class AnormCategoryDAO @Inject()(db: Database) extends CategoryDAO {
val category = {
int("id") ~ str("display_name") ~ str("url_name") map {
case id~displayName~urlName => Category(id, displayName, urlName)
}
}
...
現在,「AnormCategoryDAO」是一個類。所以我需要找出一種方法來用默認數據庫實例化它。 但我不知道如何實例化它。
object DAOFactory {
//def categoryDAO: CategoryDAO = AnormCategoryDAO
def userDAO: UserDAO = AnormUserDAO
def itemDAO: ItemDAO = AnormItemDAO
}
問題是,我該如何注入數據庫並實例化它?
我讀了這個文檔,你從我身邊走過,但我不能」現在我正在閱讀guice文檔,我想我有點理解。在我讀完這篇文章之後,我再來發表評論,謝謝 – Augusto
@Augusto如果你不熟悉依賴注入,我建議你從guice的創建者那裏談談:https://www.youtube.com/看?v = FFXhXZnmEQM – rethab
但我理解這個問題。我從playframework開始了DI項目,瞭解並瞭解如何組裝。 https://github.com/playframework/play-scala-compile-di-with-tests – Augusto