0Pricing
Android Academy · Урок

Модули и провайдеры

Объясняйте 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужно внедрение зависимостей
  2. Настройка Hilt
  3. Модули и провайдеры
  4. Внедрение зависимостей в ViewModel
← Назад к Android Academy