【问题标题】:How to manage User Scope using Koin?如何使用 Koin 管理用户范围?
【发布时间】:2019-05-10 15:15:29
【问题描述】:

我正在尝试使用 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()) }
}

在第一次登录时,它工作正常,我在我的视图模型和用例中注入了我的用户 repo。但是在注销(即删除范围)和再次登录后,UserRepository 实例仍然完全相同。

我错过了范围使用中的某些内容吗?

【问题讨论】:

  • 您确定scope 不为空并且调用了let 块吗?
  • scope var 不为空,它在 let 块内

标签: android kotlin koin


【解决方案1】:

从 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

【讨论】:

  • 注销时还需要删除范围对吧? (我正在尝试做同样的事情:P)
猜你喜欢
  • 1970-01-01
  • 2019-07-08
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
相关资源
最近更新 更多