如何将scopeId注入Koin以获取依赖关系?

时间:2020-04-22 11:38:35

标签: kotlin koin koin-scope

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

1 个答案:

答案 0 :(得分:0)

在跟踪代码之后,要做的方法是使用parameter来传递scopeId

对于上面的示例,它将是

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

如果有限定词,我们也只需通过它们发送

下面的一个示例,其中我们需要一个lambda参数来通过限定符的scopeIdname发送。 (该参数可以通过任何类型的参数自定义)。

    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") })