如何使用 Koin 管理用户范围?
How to manage User Scope using Koin?
我正在尝试使用 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 实例仍然完全相同。
我是否遗漏了范围用法中的某些内容?
从 koin 2.0.0-rc-2
迁移到 koin 2.0.0-GA
解决了我的问题。
迁移后,无法在 scope
之外声明 scoped
实例。所以我以这种方式调整了我的 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"))
这样我在 logout/login 之后重新创建了 UserRepository
。
我正在尝试使用 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 实例仍然完全相同。
我是否遗漏了范围用法中的某些内容?
从 koin 2.0.0-rc-2
迁移到 koin 2.0.0-GA
解决了我的问题。
迁移后,无法在 scope
之外声明 scoped
实例。所以我以这种方式调整了我的 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"))
这样我在 logout/login 之后重新创建了 UserRepository
。