Я являюсь разработчиком мобильных приложений с опытом уже более 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