Можно ли создать Dagger модуль в котором будут два метода которые возвращают одинаковый тип данных

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

Ответ

Да, можно, но нужно указать Dagger, как различать эти зависимости. Используй @Named или кастомные квалификаторы.

Пример с @Named:

@Module
class AppModule {
    @Named("api1")
    @Provides
    fun provideApi1(): ApiService = ApiService("https://api1.com")

    @Named("api2")
    @Provides
    fun provideApi2(): ApiService = ApiService("https://api2.com")
}

// Использование:
class MyClass @Inject constructor(
    @Named("api1") private val api1: ApiService,
    @Named("api2") private val api2: ApiService
)

Или с кастомным квалификатором:

@Qualifier
annotation class Api1

@Qualifier
annotation class Api2