Ответ
Да, работал с Hilt — это упрощённая DI-библиотека на основе Dagger, созданная для Android. Она минимизирует шаблонный код за счёт аннотаций (например, @HiltAndroidApp, @AndroidEntryPoint).
Пример внедрения зависимости:
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideRepository(): Repository = RepositoryImpl()
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var repository: Repository
}
Плюсы:
- Автоматическая генерация компонентов (Activity, Fragment и т.д.).
- Интеграция с ViewModel через
@HiltViewModel. - Меньше ручной настройки по сравнению с чистым Dagger.
Минусы:
- Менее гибкий, чем Dagger, в сложных сценариях.
- Требует понимания базовых принципов DI.
Ответ 18+ 🔞
А, Hilt! Ну это ж, блядь, как Dagger, только для тех, кому впадлу с ним разбираться. Ну то есть для нас, нормальных андроид-разработчиков, которые не хотят тратить полжизни на настройку этой ебушки-воробушки.
Смотри, в чём прикол: вместо того чтобы вручную, как лох, всё собирать, ты просто развешиваешь аннотации, и оно само магическим образом работает. Типа @HiltAndroidApp на аппликейшен — и всё, поехали. Или @AndroidEntryPoint на активити — и туда уже можно хуярить зависимости через @Inject. Красота, ёпта!
Вот смотри, как это выглядит, простейший пример:
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideRepository(): Repository = RepositoryImpl()
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var repository: Repository
}
Видишь? Никаких лишних телодвижений. Создал модуль, сказал, в какой компонент его ставить (SingletonComponent — это типа на всё приложение), и всё. В активити просто объявил поле — и оно волшебным образом появится. Не нужно писать кучу фабрик и компонентов руками, как в старом добром Dagger 2. Это, блядь, овердохуища удобно.
Что там с плюшками:
- Компоненты для активити, фрагмента и прочей хуйни генерируются автоматом. Тебе не нужно об этом думать, что уже, согласись, снимает охуенную головную боль.
- С ViewModel тоже замутили интеграцию — есть специальная аннотация
@HiltViewModel. Всё красиво и почти без костылей. - И главное — шаблонного кода в разы меньше. Не нужно этой ебаной возни с билдерами и провайдерами на каждом шагу.
Но и минусы, конечно, есть, куда без них:
- Гибкость, блядь, страдает. Если тебе нужна какая-то нестандартная, хитрая жопа логика внедрения — готовься попотеть. Чистый Dagger даёт больше контроля, тут ты немного в рамках.
- Принципы DI всё равно надо понимать. Это не волшебная таблетка. Если не понимаешь, что такое скоуп, компонент и модуль — всё равно придётся лезть и разбираться, иначе будешь как мартышлюшка с гранатой.
Короче, инструмент годный. Для 95% проектов — то, что надо. А если упрёшься в какие-то дикие архитектурные извращения — ну, тогда да, придётся либо костылить, либо возвращаться к голому Dagger. Но для начала — самое оно.