我正在使用Koin 3.0.0-alpha-4
版本,当我尝试使用注入的类时koin
,它会在 iOS 端引发异常:
KotlinException=kotlin.IllegalStateException: Must be main thread, KotlinExceptionOrigin
我有一个单例类,我正在使用 koin 初始化对象,如下所示:
@ThreadLocal
object ObjectFactory : KoinComponent{
val appStateRepository: AppStateRepository by inject()
val appStateRepositoryDemo = AppStateRepository()
}
如果我使用由 koin 注入的appStateRepository
内部后台线程 ( Dispatchers.Default
),那么它会引发异常IllegalStateException: Must be main thread
,但如果我使用 appStateRepositoryDemo,它就可以正常工作
这是我从 iOS 调用以注入模块的方法
fun initKoinIos(
userDefaults: NSUserDefaults,
doOnStartup: () -> Unit
): KoinApplication = initKoin {
module {
...
single { doOnStartup }
}
}
fun initKoin(appDeclaration: KoinAppDeclaration = {}) = startKoin {
appDeclaration()
modules(
platformModule,
networkModule,
useCaseModules,
repositoryModule,
commonUtils,
)
}
这是用法:
fun testRepoAccess() {
ObjFactory.appStateRepository.test() // Ok, here we are in main thread
CoroutineScope(Dispatchers.Default).launch {
ObjFactory.appStateRepositoryDemo.test() // Ok
ObjFactory.appStateRepository.test() // Not Ok, throws exception (Must be main thread)
}
}
预期的行为 它应该适用于 iOS,就像它适用于 Android 一样
Koin 3.0.0-alpha-4
附加模块定义
Coroutines 1.4.2-native-mt
更新
我使用了错误的 Koin 库名称,现在我正在使用:
io.insert-koin:koin-core:3.0.1
现在我有另一个例外:
kotlin.native.IncorrectDereferenceException: illegal attempt to access non-shared org.koin.core.context.GlobalContext.KoinInstanceHolder@1c02ca8 from other thread