Как управлять областью пользователя с помощью Koin? - PullRequest
5 голосов
/ 10 мая 2019

Я пытаюсь создать пользовательскую область, используя Koin. Когда пользователь вошел в систему, я создаю область:

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

И когда пользователь нажимает на выход из системы, я уничтожаю область действия

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

В моем модуле koin у меня есть scoped UserRepository, который должен жить только во время сеанса пользователя. У меня также есть ViewModels и Use Cases, которые используют этот репозиторий, и я пытаюсь внедрить репо scoped в них

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

При первом входе в систему он работает нормально, у меня есть пользовательское хранилище, введенное в моей viewmodel и сценарии использования. Но после выхода из системы (который удаляет область действия) и после другого входа в систему экземпляр UserRepository остается точно таким же.

Я что-то упускаю при использовании объема?

1 Ответ

3 голосов
/ 13 мая 2019

Переход с 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 воссоздается после выхода из системы / входа в систему.

...