我从游戏中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