我正在尝试学习Koin进行android中的依赖注入。我开始按照示例进行操作,并尝试通过注入非常简单的对象,但是出现了NoBeanDefFoundException: No definition found for ...
这是我的代码
成绩
// Koin
def koin_version = '2.0.1'
implementation "org.koin:koin-androidx-scope:$koin_version"
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
implementation "org.koin:koin-androidx-ext:$koin_version"
应用程序onCreate()
override fun onCreate() {
super.onCreate()
startKoin{
androidLogger()
androidContext(this@Application)
listOf(applicationModule)
}
}
Modules.kt
val applicationModule = module {
factory { UserSession("email","password") }
}
但是当我尝试将其作为private val userSession: UserSession by inject()
注入到任何地方(应用程序,活动,片段)时,我遇到了上面提到的错误。我想念什么吗?
答案 0 :(得分:0)
您可能对语法感到困惑,应该调用方法modules
,并为其提供要启动的模块。
在您的情况下,listOf
返回值将被忽略,您应该执行以下操作:
startKoin {
androidLogger()
androidContext(this@Application)
modules(applicationModule)
}
答案 1 :(得分:0)
尝试一下。
KoinApp.kt
class KoinApp : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
startKoin(this, listOf(appModule))
}
}
appModule.kt
@JvmField
val appModule = module {
single { DataRepository(get()) }
}
答案 2 :(得分:0)
答案会奏效,但为了将来的校对,我仍然会列出。
startKoin {
androidLogger()
androidContext(this@Application)
modules(listOf(applicationModule))
}