簡體   English   中英

如何使用 Hilt 將 ViewModel 注入另一個 Viewmodel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM