未找到 class:'yodgorbek.komilov.musobaqayangiliklari.repository.BBCRepository' & 限定符:'bbcModules' 的定义。检查你的定义?
No definition found for class:'yodgorbek.komilov.musobaqayangiliklari.repository.BBCRepository' & qualifier:'bbcModules'. Check your definitions?
我正在开发新闻 android 应用程序,我已经实现了 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.invoke(bbcModules.kt:16)
at yodgorbek.komilov.musobaqayangiliklari.di.application.module.BbcModulesKt$bbcModules.invoke(Unknown Source:4)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
... 48 more
在我实施 BBCSportViewModel 逻辑的 bbcModules.kt 下面
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)
}
}
}
我想知道我究竟在哪里犯错我必须修复异常我已经遵循了许多 Whosebug 的答案但它没有解决我的问题
堆栈跟踪显示未找到 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
}
我正在开发新闻 android 应用程序,我已经实现了 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.invoke(bbcModules.kt:16)
at yodgorbek.komilov.musobaqayangiliklari.di.application.module.BbcModulesKt$bbcModules.invoke(Unknown Source:4)
at org.koin.core.instance.InstanceFactory.create(InstanceFactory.kt:50)
... 48 more
在我实施 BBCSportViewModel 逻辑的 bbcModules.kt 下面
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)
}
}
}
我想知道我究竟在哪里犯错我必须修复异常我已经遵循了许多 Whosebug 的答案但它没有解决我的问题
堆栈跟踪显示未找到 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
}