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)
}
试试这个。
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))
}
我正在尝试在 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)
}
试试这个。
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))
}