[英]How to inject a ViewModel to another Viewmodel using Hilt
我有一個單詞測驗應用程序,其中有不同的文字游戲(多項選擇、拼寫、匹配單詞等)。 我創建了一個 ParentViewModel 來保留常見的東西,例如從 Room 數據庫中獲取單詞、當前問題變量等。但是,另一方面,因為每個游戲都有不同的方面。 他們有自己的視圖模型。 我希望能夠在子視圖模型中使用 ParentViewModel 中的函數和變量。 我的問題是我是否正確注入了下面的 ParentViewModel 或者是否有其他方法可以做到這一點?
父視圖模型:
@HiltViewModel
class ParentViewModel @Inject constructor(
private val wordRepository: WordRepository
): ViewModel(){
// Common things such as getting words from database.
}
子視圖 model(每種游戲類型的不同視圖 model):
@HiltViewModel
class SpellingViewModel @Inject constructor(
practiceViewModel: PracticeViewModel
): ViewModel(){
// Functions and varibles spesific to the current game.
}
應用模塊:
@Provides
@Singleton
fun provideParentViewModel(wordRepository: WordRepository): ParentViewModel {
return ParentViewModel(wordRepository)
}
我認為應該創建一個 baseViewModel 並從父 class 繼承子類,您可以創建父 class 中的開放函數並在子類中使用它們。 讓我給你舉個例子:
abstract class BaseViewModel : ViewModel(){open fun wordGameOne(){
// do something
}
open fun wordGameTwo(){
// do something
}
}
而在子 class 中,您可以覆蓋
@HiltViewModel class GameOneViewModel @Inject constructor(
private val wordRepository: WordRepository) : BaseViewModel() {
override fun wordGameOne(){
// do something
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.