Sobes.tech
Назад к вопросам
Junior — Middle
71

Каким образом реализовать передачу зависимостей через контекст внутри ViewModel?

Компании, где спрашивали
Мой СкладМой Склад

Ответ от нейросети

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")
    }
}

Таким образом, контекст используется аккуратно, а зависимости передаются явно, что улучшает тестируемость и предотвращает утечки памяти.