我正在尝试使用Koin创建用户范围。 登录用户后,我正在创建范围:
val scope = getKoin().createScope("USER_SCOPE")
当用户单击注销时,我正在破坏范围
scope?.let {userScope ->
userScope.close()
getKoin().deleteScope(userScope.id)
}
在我的koin模块中,我有一个scoped
UserRepository,只能在用户会话期间使用。我也有使用此存储库的ViewModel和用例,我尝试将scoped
回购注入其中。
val appModule = module {
scoped<UserRepository> { UserDataRepository() }
viewModel { UserViewModel(getScope("USER_SCOPE").get()) }
factory { MyUseCase(getScope("USER_SCOPE").get()) }
}
在第一次登录时,它可以正常工作,我在视图模型和用例中注入了用户存储库。但是,在注销(这将删除作用域)和再次登录后,UserRepository实例仍然完全相同。
我是否错过了示波器的使用范围?
答案 0 :(得分:2)
从koin 2.0.0-rc-2
迁移到koin 2.0.0-GA
解决了我的问题。
迁移后,无法在scoped
之外声明scope
实例。因此,我以这种方式修改了appmodule
:
val appModule = module {
scope(named("USER_SCOPE")) {
scoped<UserRepository> { UserDataRepository() }
}
viewModel { UserViewModel(getScope("USER_SCOPE").get()) }
factory { MyUseCase(getScope("USER_SCOPE").get()) }
}
作用域声明也有所不同:
val scope = getKoin().createScope("USER_SCOPE", named("USER_SCOPE"))
通过这种方式,我在注销/登录后重新创建了UserRepository
。