Android Koin 简单对象注入失败

Android Koin simple object inject fail

我正在尝试在 android 中学习用于依赖注入的 Koin。我开始按照示例并尝试注入非常简单的对象,但是我得到的错误是 NoBeanDefFoundException: No definition found for ...

这是我的代码

Gradle

// 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() 注入到任何地方(应用程序、Activity、片段)时,出现上述错误。我错过了什么吗?

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

在你的情况下 listOf return 值被忽略,你应该这样做:

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

Reference

试试这个。

KoinApp.kt

class KoinApp : MultiDexApplication() {
    override fun onCreate() {
        super.onCreate()
        startKoin(this, listOf(appModule))
    }
}

appModule.kt

@JvmField
    val appModule = module {
         single { DataRepository(get()) } 
    }

答案会起作用,但为了将来的校对,我仍然会有列表。

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

}