【问题标题】:How to inject scopeId into Koin to get the dependency?如何将 scopeId 注入 Koin 以获取依赖项?
【发布时间】:2020-04-22 11:38:35
【问题描述】:

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

【问题讨论】:

    标签: kotlin koin koin-scope


    【解决方案1】:

    跟踪代码后,方法是使用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") })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2023-01-30
      • 2020-12-20
      • 2021-12-18
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多