Модули и провайдеры
Объясняйте Hilt, как создавать зависимости
«Модули и провайдеры» — бесплатный урок Android Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Как сообщить Hilt, что и как создавать
Hilt может автоматически создать класс, если его конструктор помечен аннотацией @Inject. Но для интерфейсов или типов, которыми Вы не владеете, необходимо объяснить Hilt, как работать с ними, с помощью Module.
Внедрение через конструктор
Простейший случай: аннотируйте конструктор, и Hilt будет знать, как создать класс.
class Analytics @Inject constructor(
private val api: ApiService
)Когда внедрения через конструктор недостаточно
Нельзя аннотировать конструктор:
- интерфейса (у него нет конструктора);
- класса из библиотеки (например, Retrofit или Room).
Для них нужен модуль.
Определение модуля
@Module сообщает Hilt, как предоставлять типы. @InstallIn указывает, к какому компоненту (области действия) он относится.
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule@Provides для типов из библиотек
Используйте @Provides для функции, которая создаёт и возвращает зависимость. Hilt вызывает её, когда требуется этот тип.
@Provides
@Singleton
fun provideRetrofit(): Retrofit =
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build()Поставщики могут зависеть друг от друга
Функция @Provides может принимать параметры; Hilt предоставит их из графа.
@Provides
fun provideApi(retrofit: Retrofit): ApiService =
retrofit.create(ApiService::class.java)@Binds для интерфейсов
Чтобы связать интерфейс с реализацией, используйте @Binds в абстрактном модуле. Для простой связи это эффективнее, чем @Provides.
@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModule {
@Binds
abstract fun bindRepo(
impl: NetworkUserRepository
): UserRepository
}@Provides и @Binds
- @Binds — когда нужно лишь связать интерфейс с реализацией, в которой используется внедрение через конструктор. Абстрактная функция.
- @Provides — когда для создания объекта необходимо выполнить код (например, использовать построитель).
Задание области действия с помощью @Singleton
Аннотируйте поставщик областью действия, например @Singleton, чтобы Hilt повторно использовал один экземпляр во всём приложении, а не создавал новый при каждом обращении.
Соответствие области действия компоненту
Область действия должна соответствовать компоненту: @Singleton — SingletonComponent, @ActivityScoped — ActivityComponent и так далее.
Итоги по модулям
@Module+@InstallInопределяют, где находятся связи.@Providesсоздаёт типы из библиотек и сложные типы.@Bindsсвязывает интерфейсы с реализациями.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли модули и поставщики.
Итоги
Вы узнали:
- Внедрение через конструктор работает, когда класс принадлежит Вам.
@Module+@InstallInсообщают Hilt, как предоставлять другие типы.@Providesсоздаёт объекты из библиотек и сложные объекты, а@Bindsсвязывает интерфейсы.- Сопоставлять области действия, например
@Singleton, с соответствующими компонентами.
Часто задаваемые вопросы
Урок «Модули и провайдеры» бесплатный?
Да — полный текст урока «Модули и провайдеры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Модули и провайдеры»?
Объясняйте Hilt, как создавать зависимости Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Модули и провайдеры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужно внедрение зависимостей
- Настройка Hilt
- Модули и провайдеры
- Внедрение зависимостей в ViewModel