Какие знаешь аннотации в Dagger позволяющие добавить класс в граф зависимостей

«Какие знаешь аннотации в Dagger позволяющие добавить класс в граф зависимостей» — вопрос из категории DI, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@Inject - конструктор, поля или методы, указывающие на внедрение зависимости.
@Module - класс, предоставляющий зависимости через методы с @Provides.
@Provides - метод внутри @Module, создающий зависимость.
@Binds - абстрактный метод в модуле для привязки интерфейса к реализации.
@Component - интерфейс, связывающий модули и запрашивающие зависимости.
@Singleton / кастомные scope (@ActivityScope) - ограничивают время жизни зависимости.

Пример:

@Module
class AppModule {
    @Provides
    @Singleton
    fun provideApi(): ApiService = Retrofit.create()
}

@Component(modules = [AppModule::class])
@Singleton
interface AppComponent {
    fun inject(activity: MainActivity)
}