Ich bin aus dem Spiel 2,3-2,5 MigrationWie Abhängigkeit Inject Datenbank in Play 2.5
Ursprünglich habe ich „DAOFactory“ Objekt
object DAOFactory {
def categoryDAO: CategoryDAO = AnormCategoryDAO
def itemDAO: ItemDAO = AnormItemDAO
def bidDAO: BidDAO = AnormBidDAO
def userDAO: UserDAO = AnormUserDAO
def feedStatsDAO: FeedStatsDAO = AnormFeedStatsDAO
}
und lassen Sie sich „AnormCategoryDAO“ als Beispiel nehmen, und ich müssen das „Objekt“ ändern in eine „Klasse“
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 *)
}
}
Also änderte ich das Objekt zu CLASS und kommentierte mit SINGLETON wie unten, und ich änderte „DB.withConnection“ auf „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)
}
}
...
Jetzt ist "AnormCategoryDAO" eine Klasse. Also muss ich herausfinden, wie man es mit einer Standarddatenbank instanziieren kann. Aber ich weiß nicht, wie man es instanziiert.
object DAOFactory {
//def categoryDAO: CategoryDAO = AnormCategoryDAO
def userDAO: UserDAO = AnormUserDAO
def itemDAO: ItemDAO = AnormItemDAO
}
Die Frage ist, wie injiziere ich die Datenbank und instanziiere sie?
ich diese Dokumentation gelesen hatte Sie mir vorbei, aber ich couldn‘ Ich verstehe gut, jetzt lese ich die richtige Dokumentation, und ich glaube, ich verstehe ein wenig. Nachdem ich das gelesen habe, komme ich wieder und lass einen Kommentar, danke – Augusto
@Augusto Wenn du nicht vertraut bist mit Abhängigkeitsinjektionen, empfehle ich dieses Gespräch vom Schöpfer von guice: https://www.youtube.com/ beobachten? v = FFXhXZnmEQM – rethab
Noch verstehe ich dieses Thema. Ich habe das DI-Projekt von playframework genommen, um zu verstehen und zusammenzubauen. https://github.com/playframework/play-scala-compile-di-with-tests – Augusto