gpt4 book ai didi

android - 如何使用 Koin 管理用户范围?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:50:40 27 4
gpt4 key购买 nike

我正在尝试使用 Koin 创建用户范围。当用户登录时,我正在创建范围:

val scope = getKoin().createScope("USER_SCOPE")

当用户点击注销时,我正在破坏作用域

    scope?.let {userScope ->
userScope.close()
getKoin().deleteScope(userScope.id)
}

在我的 koin 模块中,我有一个 scoped UserRepository,它应该只在用户 session 期间存在。我还有使用此存储库的 ViewModel 和用例,我尝试在其中注入(inject) scoped repo

val appModule = module {
scoped<UserRepository> { UserDataRepository() }
viewModel { UserViewModel(getScope("USER_SCOPE").get()) }
factory { MyUseCase(getScope("USER_SCOPE").get()) }
}

在第一次登录时,它工作正常,我在我的 View 模型和用例中注入(inject)了我的用户 repo。但是在注销(删除作用域)和另一次登录之后,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"))

通过这种方式,我可以在注销/登录后重新创建 UserRepository

关于android - 如何使用 Koin 管理用户范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56080444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com