Хорошо, давайте сделаем это просто.
Я создал простую библиотеку под названием my-network-library
с двумя классами. Первый - это модуль Hilt под названием BaseNetworkModule
@Module
@InstallIn(ApplicationComponent::class)
object BaseNetworkModule {
// Client
@Singleton
@Provides
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder()
// my default okhttp setup goes here
.build()
}
}
, а второй - простой класс.
class MyAwesomeClass {
fun doMagic() {
// magic code goes here
}
}
Теперь я хочу использовать MyAwesomeClass
в одном из своих приложений. . Поэтому я добавил зависимость в приложение.
implementation "com.theapache64:my-awesome-library-1.0.0"
У меня также есть реализация сетевых вызовов, и я не хочу использовать OkHttpClient
из my-network-library
. Итак, я создал модуль в приложении, чтобы получить свой собственный экземпляр OkHttpClient
.
@Module
@InstallIn(ApplicationComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder()
// CUSTOM CONFIG GOES HERE
.build()
}
}
Теперь я получаю ошибку ниже.
error: [Dagger / DuplicateBindings ] okhttp3.OkHttpClient привязывается несколько раз:
Я знаю, что это из-за @Provides
, объявленного в my-network-library
, но я не указал includes
в аннотации @Module
к наследовать зависимость от BaseNetworkModule
. Проблема может быть исправлена с использованием аннотации @Qualifier
, но, IMO, это было бы обходным путем.
, поэтому мой вопрос:
- Почему зависимость от библиотечного модуля входит в приложение модуль без использования
includes
из @Module
? - Как сказать Hilt: «Не искать @Provides во внешних библиотеках (зависимости Gradle)?» если я не отмечу модуль
@Module(includes = XXXModule)