Какую аннотацию в Dagger можно использовать для добавления зависимости в компонент извне

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

Ответ

@Module + @Provides или @Binds для предоставления зависимостей.
Для внедрения извне используй @Component.Builder или @Component.Factory:

@Component(modules = [MyModule::class])
interface MyComponent {
    @Component.Factory
    interface Factory {
        fun create(@BindsInstance externalDep: ExternalDependency): MyComponent
    }
}

// Использование:
val component = DaggerMyComponent.factory()
    .create(ExternalDependencyImpl())