好吧,让我们把这个简单化。
我创建了一个简单的库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
from my-network-library
。所以我在应用程序中创建了一个模块来获取我自己的OkHttpClient
.
@Module
@InstallIn(ApplicationComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder()
// CUSTOM CONFIG GOES HERE
.build()
}
}
现在正在低于错误。
错误:[Dagger/DuplicateBindings] okhttp3.OkHttpClient 被绑定多次:
我知道这是因为在 中@Provides
声明my-network-library
,但我没有指定includes
注释@Module
从BaseNetworkModule
. 可以使用@Qualifier
注释解决该问题,但 IMO,这将是一种解决方法。
所以我的问题是
includes
为什么库模块的依赖项会在不使用of 的情况下进入应用程序模块@Module
?- 如何告诉 Hilt “不要在外部库中寻找 @Provides(gradle 依赖项)?” 除非我用
@Module(includes = XXXModule)