Внедрение зависимостей в ViewModel
Используйте @HiltViewModel для чистого внедрения зависимостей
«Внедрение зависимостей в ViewModel» — бесплатный урок Android Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Внедрение ViewModel с помощью Hilt
ViewModel — особый случай: фреймворк создаёт их через фабрику. Hilt интегрируется с этим механизмом с помощью аннотации @HiltViewModel.
Аннотирование ViewModel
Пометьте ViewModel аннотацией @HiltViewModel, а её конструктор — аннотацией @Inject.
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Что предоставляет Hilt
Hilt ищет каждый параметр конструктора в графе зависимостей. Если UserRepository связан через модуль или внедрение через конструктор, Hilt предоставит его автоматически.
Получение в Compose
Используйте hiltViewModel() внутри Composable, чтобы получить ViewModel, предоставленную Hilt.
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}Хост должен быть точкой входа
Чтобы hiltViewModel() работала, Activity-хост должна быть аннотирована с помощью @AndroidEntryPoint. Это связывает Compose с графом Hilt.
@AndroidEntryPoint
class MainActivity : ComponentActivity()Внедрение других зависимостей
Можно внедрять любые объекты из графа: репозитории, варианты использования и даже базу данных Room, предоставленную модулем.
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Внедрение контекста приложения
Нужен контекст? Внедрите квалифицированный контекст приложения с помощью @ApplicationContext.
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt автоматически предоставляет SavedStateHandle, который переносит аргументы навигации и сохраняется после завершения процесса.
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}Полная схема связей
От начала до конца: модуль предоставляет репозиторий → Hilt внедряет его в ViewModel → Compose получает ViewModel через hiltViewModel(). Ручные фабрики не нужны.
Без ручного кода фабрик
Без Hilt Вам пришлось бы писать собственную ViewModelProvider.Factory для каждой ViewModel, которой нужны аргументы конструктора. @HiltViewModel полностью устраняет эту необходимость.
Собираем весь учебный трек
Теперь у Вас есть полный современный стек: ViewModel и состояние с учётом жизненного цикла, сохранение с помощью Room, сопрограммы и Flow — всё связано через Hilt DI.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли внедрение ViewModel.
Итоги
Вы узнали:
- Конструктор
@HiltViewModel+@Injectпозволяет Hilt создавать ViewModel. - Получать их в Compose с помощью
hiltViewModel()внутри хоста с аннотацией@AndroidEntryPoint. - Внедрять репозитории,
@ApplicationContextиSavedStateHandle. - Ручные фабрики не нужны.
Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 36
- Уроки
- 152
Часто задаваемые вопросы
Урок «Внедрение зависимостей в ViewModel» бесплатный?
Да — полный текст урока «Внедрение зависимостей в ViewModel» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Внедрение зависимостей в ViewModel»?
Используйте @HiltViewModel для чистого внедрения зависимостей Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Внедрение зависимостей в ViewModel»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужно внедрение зависимостей
- Настройка Hilt
- Модули и провайдеры
- Внедрение зависимостей в ViewModel