【问题标题】:koin default implementation without name referencekoin 默认实现,没有名称引用
【发布时间】: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) }

【问题讨论】:

标签: android mobile dependency-injection kotlin koin


【解决方案1】:

你是对的@Eslam。当前行为(截至koin:1.0.2)是当您不指定依赖项名称时,它是treated 作为一个空字符串。而then 的定义通过类名得到filtered

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

因此,您会得到两个定义,这会导致上述错误:Multiple definitions for class ...

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多