Android Koin简单对象注入失败

时间:2019-09-18 17:58:32

标签: android kotlin koin

我正在尝试学习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()注入到任何地方(应用程序,活动,片段)时,我遇到了上面提到的错误。我想念什么吗?

3 个答案:

答案 0 :(得分:0)

您可能对语法感到困惑,应该调用方法modules,并为其提供要启动的模块。

在您的情况下,listOf返回值将被忽略,您应该执行以下操作:

startKoin {
    androidLogger()
    androidContext(this@Application)
    modules(applicationModule)
}

Reference

答案 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))

}