@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://example.com/")
.client(okHttpClient)
.build()
}
@Singleton
@Provides
fun provideMyRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http:/my.com/")
.client(okHttpClient)
.build()
}
}
Their difference is only baseUrl
.
I tried to solve this problem by use @Qualifier
.
interface RetrofitQualifier {
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class Retrofit
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class MyRetrofit
}
@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Singleton
@Provides
@RetrofitQualifier.Retrofit
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://example.com/")
.client(okHttpClient)
.build()
}
@Singleton
@Provides
@RetrofitQualifier.MyRetrofit
fun provideMyRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http:/my.com/")
.client(okHttpClient)
.build()
}
}
And I use it by use @RetrofitQualifier.MyRetrofit
in my class:
class MyRepository @Inject constructor(
application: Application
) {
...
@Inject
@RetrofitQualifier.MyRetrofit
lateinit var retrofit:Retrofit
private val service: Service = retrofit.create(Service::class.java)
...
}
However, I was failed, the log is
kotlin.UninitializedPropertyAccessException: lateinit property retrofit has not been initialized
What should I do? Maybe use @Named
? I am not sure...