0
我試圖創建一個可以被多個類使用的單個數據庫實例(在Kotlin中使用object
關鍵字)。但是,我希望能夠在創建單例實例之前指定數據庫名稱。啓動時參數化初始化的單例數據庫對象?
由於單獨的對象不能與參數進行初始化,我在想,如果我在做什麼是有效的,或者如果有做事更好的辦法:在另一個文件
object DatabaseSingleton {
private lateinit var databaseName: String
private lateinit var mongoClient: MongoClient
val database: DatabaseContainer by lazy {
DatabaseContainer(databaseName, mongoClient)
}
fun init(databaseName: String, mongoClient: MongoClient): DatabaseSingleton {
this.databaseName = databaseName
this.mongoClient = mongoClient
return this
}
}
而且
class DatabaseContainer(databaseName: String, val mongoClient: MongoClient) {
val db: MongoDatabase = mongoClient.getDatabase(databaseName)
val table: MongoCollection<Settings> = db.getCollection<Settings>(TABLE_NAME)
}
基本上,我在單例對象中封裝了一個「數據庫容器」,通過對數據庫容器使用延遲初始化並提供指定數據庫名稱的lateinit變量,並在單例對象中具有初始化函數來初始化數據庫容器。這是這樣的,以我的主要方法,當我第一次啓動我的應用程序時,我可以從一些本地屬性文件加載數據庫名稱,並調用val database = DatabaseSingleton.init("DATABASE_NAME", client)
來創建我的數據庫單例需要被其他多個類訪問。
這是一個很好的方法來做我想做的事,還是有更好的做事方式?
謝謝,我將其更改爲在這種情況下的系統性能。 不過,是延遲加載的方法,並遲到一個有效的方法? –