Back to questions
Мой Склад
Junior — Middle
70
Каким образом реализовать передачу зависимостей через контекст внутри ViewModel?
Companies where asked
Answer from AI
sobes.tech AI
В Android ViewModel обычно не рекомендуется напрямую хранить или использовать Context, чтобы избежать утечек памяти. Однако, если нужно передать зависимости через контекст, можно использовать следующие подходы:
- Передача Application Context: Наследовать ViewModel от AndroidViewModel, который предоставляет доступ к Application Context.
class MyViewModel(application: Application) : AndroidViewModel(application) {
private val context = getApplication<Application>().applicationContext
// Используйте context для доступа к ресурсам или системным сервисам
}
- Использование Dependency Injection: Передавать необходимые зависимости в конструктор ViewModel через фабрику.
class MyViewModel(private val repository: MyRepository) : ViewModel() {
// Логика ViewModel
}
class MyViewModelFactory(private val repository: MyRepository) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MyViewModel::class.java)) {
return MyViewModel(repository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
Таким образом, контекст используется аккуратно, а зависимости передаются явно, что улучшает тестируемость и предотвращает утечки памяти.