Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – koin没有名称引用的默认实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个Retrofit客户端,其中一个认,第二个有不同的实现,如(基本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()) }
}

结果是:

@H_640_11@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) }
@H_489_34@解决方法
你是对的@Eslam.当前行为(从koin:1.0.2开始)是指未指定依赖项名称时,它是 treated作为空字符串. then定义按类名获得 filtered

fun searchByClass(clazz: KClass<*>): List<BeanDeFinition<*>> {
    return deFinitions.filter { clazz in it.classes }
}

因此,您将获得两个定义,从而导致上述错误:类的多个定义….

大佬总结

以上是大佬教程为你收集整理的android – koin没有名称引用的默认实现全部内容,希望文章能够帮你解决android – koin没有名称引用的默认实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。