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

в 7:15, , рубрики: adnroid studio, android, dagger, di, hilt, inject, kotlin, гайд для разработчиков, гайдлайн, гайды

Я являюсь разработчиком мобильных приложений с опытом уже более 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() { ... }
  • Application (с помощью @HiltAndroidApp )

  • ViewModel (с помощью @HiltViewModel )

  • Activity

  • Fragment

  • View

  • Service

  • BroadcastReceiver

Именно эти компоненты поддерживает 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 в классах из вне. Интересно? Читайте дальше и вы станете настоящим гуру!

Автор: SpaceTimofey

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js