Работал ли с Hilt

Ответ

Да, работал с 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. Но для начала — самое оно.