Как внедрить scopeId в Koin, чтобы получить зависимость?

В https://github.com/InsertKoinIO/koin/blob/master/koin-projects/docs/reference/koin-android/scope.md#sharing-instances-between-components-with-scopes это показано в примере ниже

module {
    // Shared user session data
    scope(named("session")) {
        scoped { UserSession() }
    }

    // Inject UserSession instance from "session" Scope
    factory { (scopeId : ScopeID) -> Presenter(getScope(scopeId).get())}
}

Но я даже не знаю, как получить presenter?

я пытаюсь

val nameScope = getKoin().createScope("SomeName", named("session"))
val presenter = get<Presenter>(nameScope.id)

но это не правильно. Как получить мой presenter?


person Elye    schedule 22.04.2020    source источник


Ответы (1)


После отслеживания кода способ сделать это — использовать parameter для передачи scopeId.

Для приведенного выше примера это будет

val nameScope = getKoin().createScope("SomeName", named("session"))
val presenter = get<Presenter>(parameters = { parametersOf(nameScope.id) )

Если есть квалификатор, нам просто нужно отправить через них

Один пример, как показано ниже, где нам нужен параметр лямбда для отправки через scopeId и name квалификатора. (аргумент самоопределяется через параметры любого типа).

    module {
        scope(named("AScopeName")) {
            scoped(qualifier = named("scopedName")) { Dependency() }
            factory(qualifier = named("factoryName")) { Dependency() }
        }


        factory { (scopeId: ScopeID, name: String) ->
            Environment(getScope(scopeId).get(qualifier = named(name)))
        }
    }

Тогда вызов так же прост, как показано ниже

val nameScope = getKoin().createScope("SomeName", named("AScopeName"))
val environment = get<Environment>(parameters = { parametersOf(nameScope.id, "scopedName") })

Или мы могли бы также

val nameScope = getKoin().createScope("SomeName", named("AScopeName"))
val environment = get<Environment>(parameters = { parametersOf("SomeName", "scopedName") })
person Elye    schedule 22.04.2020