Ответ
@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)
}