没有找到 class:'yodgorbek.komilov.musobaqayangiliklari.repository.BBCRepository' & qualifier:'bbcModules'的定义。检查你的定义?

问题描述 投票:0回答:1

我正在开发新闻安卓应用程序,我已经实现了Koin模块,但我得到了以下异常情况。

executor.executeLifecycleState(TransactionExecutor.java:147)
 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:73)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858)
 at android.os.Handler.dispatchMessage(Handler.java:106)
 at android.os.Looper.loop(Looper.java:201)
 at android.app.ActivityThread.main(ActivityThread.java:6820)
 ... 3 more
Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'yodgorbek.komilov.musobaqayangiliklari.repository.BBCRepository' & qualifier:'bbcModules'. Check your definitions!
 at org.koin.core.scope.Scope.throwDefinitionNotFound(Scope.kt:247)
 at org.koin.core.scope.Scope.resolveInstance(Scope.kt:216)
 at org.koin.core.scope.Scope.get(Scope.kt:181)
 at yodgorbek.komilov.musobaqayangiliklari.di.application.module.BbcModulesKt$bbcModules$1$2.invoke(bbcModules.kt:16)
 at yodgorbek.komilov.musobaqayangiliklari.di.application.module.BbcModulesKt$bbcModules$1$2.invoke(Unknown Source:4)
 at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
 ... 48 more

在我的bbcModules.kt下面,我已经实现了BBCSportViewModel逻辑。

val bbcModules = module {
    factory(named("bbcModules")) { (BBCRepositoryImpl(bbcsportNewsApi = get())) }
    // Tells Koin how to create an instance of BBCRepository

    viewModel { BBCSportViewModel(bbcRepository = get(named("bbcModules")))

    }


}

下面的BBCRepository.kt

interface BBCRepository {
    // Suspend is used to await the result from Deferred
    suspend fun getBBCList(): UseCaseResult<List<Article>>
}


@Suppress("UNCHECKED_CAST")
class BBCRepositoryImpl(private val bbcsportNewsApi: SportNewsInterface) : BBCRepository {
    override suspend fun getBBCList(): UseCaseResult<List<Article>> {

        return try {
            val result = bbcsportNewsApi.getBBCSport().body()!!.articles
            UseCaseResult.Success(result)
        } catch (ex: Exception) {
            UseCaseResult.Error(ex)
        }
    }
}

我想知道我到底在哪里犯了错误,我必须要修复异常,我按照StackOverflow的许多答案,它没有解决我的问题。

android mvvm dependency-injection repository-pattern koin
1个回答
0
投票

堆栈跟踪显示,没有定义 BBCRepository 被发现。

在你的koin模块中,你有一个工厂的 BBCRepositoryImpl 而不是 BBCRepository:

factory(named("bbcModules")) {
   (BBCRepositoryImpl(bbcsportNewsApi = get())) 
}

为了让它工作,你应该确保你在koin中提供的接口是。

factory<BBCRepository>(named("bbcModules")) { 
    BBCRepositoryImpl(bbcsportNewsApi = get())
}

factory(named("bbcModules")) {
 (BBCRepositoryImpl(bbcsportNewsApi = get())) as BBCRepository 
}
© www.soinside.com 2019 - 2024. All rights reserved.