【发布时间】:2018-12-31 15:14:34
【问题描述】:
我有 2 个改造客户端,其中一个是默认客户端,第二个有不同的实现,例如(基本 URL、拦截器等...)
我需要在不使用名称引用的情况下注入默认客户端
第一个客户:-
single<Retrofit> {
Retrofit.Builder()
.baseUrl(RemoteConstants.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(APIResponseConverter())
.addConverterFactory(GsonConverterFactory.create(get()))
.client(get())
.build()
}
第二个客户:-
single<Retrofit>("retrofit_second") {
Retrofit.Builder()
.baseUrl("diffrent url")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(get()))
.client(get("SecondOkHttpClient"))
.build()
}
我的注入方式
val myModule = module {
factory { get<Retrofit>().create(FirstAPI::class.java) } // Why Koin did not figure it without providing its default name !?
factory { get<Retrofit>("retrofit_second").create(SecondAPI::class.java) }
factory<IMyRemoteDataSource> { MyRemoteDataSource(get(), get()) }
factory<IMyRepository> { MyRepository(get()) }
factory { MyUseCase(get()) }
}
结果是:
Multiple definitions found for type 'class retrofit2.Retrofit' - Koin can't choose between :
Single [name='retrofit_second',class='retrofit2.Retrofit']
Single [name='Retrofit',class='retrofit2.Retrofit']
为什么 Koin 在不提供默认名称 (Retrofit) 的情况下没有获得默认的 Retrofit 实例!?
factory { get<Retrofit>().create(FirstAPI::class.java) }
【问题讨论】:
-
这看起来更像是一个问题(即功能请求),您可以在 Koin 存储库中打开
-
@OmarMainegra 我添加了它。 github.com/InsertKoinIO/koin/issues/322
标签: android mobile dependency-injection kotlin koin