所以,一些修修補補後,我得到它的工作:
我創建了一個Singleton類和我的水桶
@Singleton
class CouchbaseConnectionPool @Inject() (appLifecycle: ApplicationLifecycle){
val cluster=CouchbaseCluster.create("127.0.0.1")
val dataBucket=cluster.openBucket("data")
val fileBucket=cluster.openBucket("files")
appLifecycle.addStopHook {() =>
cluster.disconnect()
Future.successful(())
}
}
和控制器看起來像這樣
class DirectDBAccess @Inject() (pool:CouchbaseConnectionPool) extends Controller {
def listAll(dbtype:String) = Action {
val result:N1qlQueryResult = pool.dataBucket.query(N1qlQuery.simple("select bucket.* from bucket where type=\""+dbtype+"\""))
val data=result.allRows().mkString(",")
val total=result.allRows().length
val response="{data:["+data+"],total:"+total+"}"
Ok(response).as("application/json")
}
}
並最終綁定我加在一起
bind(classOf[CouchbaseConnectionPool]).asEagerSingleton()
到module.scala,它的工作原理!
是的,你在DI的正確軌道上。你會創建一個模塊,將它作爲一個單例綁定,並且這樣做是非常熱切的。 Play具有內置的Guice支持,使用它可以非常容易地完成此操作。檢查文檔中的一些指針:https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection例如,查看使用此模式的ReactiveMongo。 –
@MichaelKendra嘿,謝謝你的指導。我再次更加專注地閱讀那篇文章,並且結合遊戲中的例子,我將它運行起來! –