[英]Why do we need Dependency Injection for singleton classes in java or Android?
[英]Why do I still need to use singleton classes with a dependency injection library (Hilt)?
官方 android 文檔建議使用諸如Hilt
之類的依賴注入庫而不是手動依賴注入的原因之一是難以重用對象。 而且我必須應用 singleton 模式,這使得測試更加困難,因為所有測試共享相同的 singleton 實例。 所以 Hilt 應該替換 singleton 類。
但是我在檢查向日葵樣品時發現它仍然使用帶有 Hilt 的 singleton 圖案。
App 數據庫聲明為 singleton:
// For Singleton instantiation
@Volatile private var instance: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return instance ?: synchronized(this) {
instance ?: AppDatabase.buildDatabase(context).also { instance = it }
}
}
DatabaseModule
也適用於應用程序容器:
@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {
@Singleton
@Provides
fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
return AppDatabase.getInstance(context)
}
//...
}
在這里使用 singleton 模式對我來說沒有意義,因為通過使用@Singleton
注釋@Provides provideDatabase()
方法。 Hilt
確保在整個應用生命周期中只使用一個實例。
Hilt
不應該也替換 singleton 模式嗎?
官方 android 文檔建議使用諸如Hilt
之類的依賴注入庫而不是手動依賴注入的原因之一是難以重用對象。 而且我必須應用 singleton 模式,這使得測試更加困難,因為所有測試共享相同的 singleton 實例。 所以 Hilt 應該替換 singleton 類。
但是我在檢查向日葵樣品時發現它仍然使用帶有 Hilt 的 singleton 圖案。
App 數據庫聲明為 singleton:
// For Singleton instantiation
@Volatile private var instance: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return instance ?: synchronized(this) {
instance ?: AppDatabase.buildDatabase(context).also { instance = it }
}
}
DatabaseModule
也適用於應用程序容器:
@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {
@Singleton
@Provides
fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
return AppDatabase.getInstance(context)
}
//...
}
在這里使用 singleton 模式對我來說沒有意義,因為通過使用@Singleton
注釋@Provides provideDatabase()
方法。 Hilt
確保在整個應用生命周期中只使用一個實例。
Hilt
不應該也替換 singleton 模式嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.