我有一个Kotlin多平台项目,其中包含iOS,Android和Desktop,我想使用SQLDelight来存储数据.但我用科恩做调查员
因为我有几个平台,所以我做了commonMain
到startKoin
.
该文件包含期望值,该值将返回每个平台的SqlDriver
,以及从commonMain
与数据库通信所需的其余实现.
expect val dbModule: Module
val repoModel = module {
single<DbRepository> {
DbRepository(get<SqlDriver>())
}
}
fun initKoin() = startKoin {
modules(
dbModule,
repoModel
)
}
我发现每个平台都有一个问题,所以我决定一次专注于一个平台.
Android平台的问题是你无法获得AndroidSqliteDriver
所需的上下文.
actual val dbModule: Module = module {
single<SqlDriver> {
AndroidSqliteDriver(Kos.Schema, androidContext(), "Kos")
}
}
对于Android,你需要上下文来初始化驱动程序,但你没有办法注入它.因为我是从commonMain
启动Koin,我找不到一种方法从Application
类获取Android上下文.
我试过这个方法:
class MyApp: Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MyApp)
}
}
}
也这样
class MyApp: Application() {
override fun onCreate() {
super.onCreate()
koinApplication {
androidContext(this@MyApp)
}
}
}
即使这样
class MyApp: Application() {
override fun onCreate() {
super.onCreate()
loadKoinModules(
module {
single { this@MyApp }
}
)
}
}
我总是出错
原因:org. koin. core. error. KoinAppAlreadyStartedException:一个Koin应用程序已经启动
原因:org. koin. android. error. MissingAndroidContextException:无法解析上下文实例.请在KoinApplication配置中使用androidContext()函数.
如何获得android上下文为SQLDelight驱动程序与kmp使用Koin?