Практика 9. Dagger Hilt: внедрение зависимостей
Цель и задачи
Освоить внедрение зависимостей через Dagger Hilt, убрать ручное создание Retrofit, Repository и других компонентов из Activity/ViewModel, изучить ключевые аннотации Hilt (@HiltAndroidApp, @AndroidEntryPoint, @HiltViewModel, @Module, @InstallIn, @Provides, @Binds, @Singleton) и организовать DI-модули в отдельном пакете di.
Что сделано
1. Добавлены зависимости Hilt в build.gradle.kts.
2. Создан NotesApp — класс Application с @HiltAndroidApp, зарегистрирован в манифесте.
3. MainActivity помечена @AndroidEntryPoint.
4. Создан di/NetworkModule.kt — Hilt-модуль для OkHttp, Moshi, Retrofit, NoteApi.
5. Создан di/RepositoryModule.kt — Hilt-модуль для SyncedNotesRepository.
6. NotesViewModel помечен @HiltViewModel с @Inject constructor.
7. NotesListScreen использует hiltViewModel() вместо viewModel().
Вывод
Освоен Dagger Hilt — стандартный DI-фреймворк для Android. Изучены ключевые аннотации: @HiltAndroidApp (Application), @AndroidEntryPoint (Activity), @HiltViewModel (ViewModel), @Module + @InstallIn (модули), @Provides (для чужих классов), @Singleton (скоуп), @Inject constructor (инъекция). Созданы два модуля — NetworkModule (OkHttp, Moshi, Retrofit, NoteApi) и RepositoryModule (SyncedNotesRepository) — предоставляющие все зависимости через DI-граф. Убрано ручное создание Retrofit/OkHttp/Moshi/Repository из кода. NotesViewModel теперь получает зависимость через @Inject constructor — Hilt сам находит её в графе. В Compose используется hiltViewModel() вместо viewModel(), что автоматически привязывает ViewModel к навигационному графу. Все зависимости — Singleton в SingletonComponent, то есть создаются один раз на всё приложение. Приложение работает в полном соответствии с рекомендациями Google по архитектуре Android.