Ответ
Для инъекции зависимостей в ViewModel используйте ViewModelProvider.Factory. В Android рекомендуется использовать Hilt для упрощения DI. Пример с Hilt:
@HiltViewModel
class MyViewModel @Inject constructor(
private val repository: MyRepository
) : ViewModel() {
//...
}
Без Hilt:
class MyViewModelFactory(
private val repository: MyRepository
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return MyViewModel(repository) as T
}
}
// В Activity/Fragment:
val factory = MyViewModelFactory(repository)
val viewModel = ViewModelProvider(this, factory)[MyViewModel::class.java]
Ключевые моменты:
- ViewModel не должна получать контекст напрямую
- Для Hilt достаточно аннотации
@HiltViewModel - Без Hilt нужно реализовать Factory