Dagger Hilt (Для начинающих)

273ef7275093615d392af2712512f6bc

Я являюсь разработчиком мобильных приложений с опытом уже более 3х лет! Я всегда разрабатываю мобильные приложения один — это требует моя работа. Но сегодня я хочу поделиться с Вами тем, что такое Dagger Hilt!

Следите за мной в телеграм

Dagger Hilt — это необходимый каждому инструмент, который упрощает в разы разработку мобильных приложений. Служит для внедрения зависимостей. В первую очередь он необходим тем, у кого в проекте есть множество классов, которые требуют реализации. Хотите чтоб за вас это сделал кто-то другой? Dagger Hilt к вашим услугам.

Hilt — это библиотека внедрения зависимостей для Android, которая упрощает шаблонное внедрение зависимостей вручную в ваш проект. Выполнение внедрения зависимостей вручную требует от вас создания каждого класса и его зависимостей вручную, а также использования контейнеров для повторного использования и управления зависимостям

⭐ Преимущества

  • Быстрый старт

  • Упрощенное управление зависимостями

  • Интеграция с Android компонентами (Activity, Fragment, ViewModel)

⭐ Добавление в проект

Version Catalog:

[versions]
# other versions
hilt-version = "2.51.1"


[libraries]
# other libraries
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt-version" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt-version" }
hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version = "1.2.0" }


[plugins]
# other plugins
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt-version" }

build.gradle.kts (Module: app)

plugins {
    // other plugins
    id("kotlin-kapt")
    alias(libs.plugins.hilt)
}

kapt {
    correctErrorTypes = true
}

dependencies {
  // other dependencies
  implementation(libs.hilt.android)
  kapt(libs.hilt.compiler)
  implementation(libs.hilt.navigation.compose)

}

build.gradle.kts (Project: YourProjectName)

plugins {
    // other plugins
    alias(libs.plugins.hilt) apply false
}

⭐ Как его использовать

Вы должны определить класс App. Это базовый класс без которого проект не сможет подтянуть Hilt.

Все приложения, использующие Hilt, должны содержать класс Application, помеченный @HiltAndroidApp. 

@HiltAndroidApp запускает генерацию кода Hilt, включая базовый класс для вашего приложения, который служит контейнером зависимостей на уровне приложени 

Инициализируете этот класс в манифесте!

@HiltAndroidApp
class App: Application() {
}

⭐ Внедрение зависимостей в классы

Как только Hilt настроен в вашем классе Application и доступен компонент уровня приложения, Hilt может предоставлять зависимости другим классам Android, имеющим аннотацию @AndroidEntryPoint

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() { ... }

Именно эти компоненты поддерживает Hilt. Все те компоненты, что не отмечены «с помощью» используют аннотацию @AndroidEntryPoint

Каждый компонент должен быть аннотирован. Это дает Hilt знать, с какого компонента начать внедрять зависимости. Это стартовые точки для Hilt-а

⭐ Реальные примеры (кейсы)

Аннотация @Inject
class TestClassInject @Inject constructor() {
    fun invoke1() = "Hello world"
    val invoke2 = "Hello world 2"
}

В MainActivity.kt

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
  @Inject lateinit var testClassInject: TestClassInject

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    testClassInject.invoke1()

  }
}

ВАЖНО: переменная, которая помечено @Inject не может быть приватной!

На это мой пост про Dagger Hilt для начинающих заканчивается. Следующий пост будет о более сложных компонентах и их применениях. Узнаете, как красиво оформить ваш репозитория при использовании Dager Hilt и как можно использовать Hilt в классах из вне. Интересно? Читайте дальше и вы станете настоящим гуру!

© Habrahabr.ru