Android Hilt使用两个2客户端
我想用匕首刀柄安装两个改型2客户端,因为我的应用程序从两个不同的api获取信息。但当我运行代码时,会引发以下异常->Android Hilt使用两个2客户端,android,kotlin,retrofit2,dagger-hilt,Android,Kotlin,Retrofit2,Dagger Hilt,我想用匕首刀柄安装两个改型2客户端,因为我的应用程序从两个不同的api获取信息。但当我运行代码时,会引发以下异常-> App_HiltComponents.java:128: error: [Dagger/DuplicateBindings] retrofit2.Retrofit is bound multiple times: public abstract static class SingletonC implements HiltWrapper_ActivityRetaine
App_HiltComponents.java:128: error: [Dagger/DuplicateBindings] retrofit2.Retrofit is bound multiple times:
public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint,
^
@org.jetbrains.annotations.NotNull @Provides retrofit2.Retrofit de.kotlinbooks.di.NetworkBooksModule.retrofitBooks(okhttp3.OkHttpClient)
@org.jetbrains.annotations.NotNull @Provides retrofit2.Retrofit de.kotlinbooks.di.NetworkNYTModule.retrofitNYT(okhttp3.OkHttpClient)
我知道改造客户端是一个单例客户端,所以我将模块分为两个文件,用于不同的api。这是我的代码->
网络图书模块
@Module
@InstallIn(SingletonComponent::class)
class NetworkBooksModule {
@Provides
fun okHttpClient(): OkHttpClient {
val levelType: HttpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
val logging = HttpLoggingInterceptor()
logging.setLevel(levelType)
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
@Provides
fun retrofitBooks(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("https://www.googleapis.com/books/v1/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
}
@Provides
fun bookService(retrofit: Retrofit): BookService {
return retrofit.create(BookService::class.java)
}
@Provides
fun bookClient(bookService: BookService): BookClient {
return BookClient(bookService)
}
}
@Module
@InstallIn(SingletonComponent::class)
class NetworkNYTModule {
@Provides
fun okHttpClient(): OkHttpClient {
val levelType: HttpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
val logging = HttpLoggingInterceptor()
logging.setLevel(levelType)
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
@Provides
fun retrofitNYT(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.nytimes.com/svc/books/v3/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
}
@Provides
fun nytService(retrofit: Retrofit): NYTService {
return retrofit.create(NYTService::class.java)
}
@Provides
fun nytClient(nytService: NYTService): NYTClient {
return NYTClient(nytService)
}
}
NetworkNYTModule
@Module
@InstallIn(SingletonComponent::class)
class NetworkBooksModule {
@Provides
fun okHttpClient(): OkHttpClient {
val levelType: HttpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
val logging = HttpLoggingInterceptor()
logging.setLevel(levelType)
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
@Provides
fun retrofitBooks(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("https://www.googleapis.com/books/v1/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
}
@Provides
fun bookService(retrofit: Retrofit): BookService {
return retrofit.create(BookService::class.java)
}
@Provides
fun bookClient(bookService: BookService): BookClient {
return BookClient(bookService)
}
}
@Module
@InstallIn(SingletonComponent::class)
class NetworkNYTModule {
@Provides
fun okHttpClient(): OkHttpClient {
val levelType: HttpLoggingInterceptor.Level = if (BuildConfig.DEBUG)
HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
val logging = HttpLoggingInterceptor()
logging.setLevel(levelType)
return OkHttpClient.Builder()
.addInterceptor(logging)
.build()
}
@Provides
fun retrofitNYT(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.nytimes.com/svc/books/v3/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
}
@Provides
fun nytService(retrofit: Retrofit): NYTService {
return retrofit.create(NYTService::class.java)
}
@Provides
fun nytClient(nytService: NYTService): NYTClient {
return NYTClient(nytService)
}
}
您可以使用界面来提供改装,而不是改装本身
@Module
@InstallIn(SingletonComponent::class)
class NetworModule {
@Provides
fun retrofitNYT(okHttpClient: OkHttpClient): NYTService{
return Retrofit.Builder()
.baseUrl("https://api.nytimes.com/svc/books/v3/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(NYTService::class.java)
}
@Provides
fun retrofitBooks(okHttpClient: OkHttpClient): BookService{
return Retrofit.Builder()
.baseUrl("https://www.googleapis.com/books/v1/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(BookService::class.java)
}
}
您可以使用界面来提供改装,而不是改装本身
@Module
@InstallIn(SingletonComponent::class)
class NetworModule {
@Provides
fun retrofitNYT(okHttpClient: OkHttpClient): NYTService{
return Retrofit.Builder()
.baseUrl("https://api.nytimes.com/svc/books/v3/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(NYTService::class.java)
}
@Provides
fun retrofitBooks(okHttpClient: OkHttpClient): BookService{
return Retrofit.Builder()
.baseUrl("https://www.googleapis.com/books/v1/")
.client(okHttpClient)
.addConverterFactory(MoshiConverterFactory.create())
.build()
.create(BookService::class.java)
}
}
使用限定符提供相同类型的多个实现。这里有更多详细信息:您可以按照此实现使用限定符来提供相同类型的多个实现。这里有更多详细信息:您可以遵循此实现