Koin:为什么在myObject.scope.close()之后仍然可以使用?

问题描述 投票:0回答:1

我有范围

scope<MyObject> {
    scoped { Presenter() }
}

然后当我成为演示者时,此方法有效。

val presenter = myObject.scope.get<Presenter>(Presenter::class.java)

类似地,当我可以分配作用域变量时,再获得演示者。

val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)

如果我们将其关闭,那还是可以的

val presenter = myObject.scope.get<Presenter>(Presenter::class.java)
myObject.scope.close()
val presenter2 = myObject.scope.get<Presenter>(Presenter::class.java)

但是,如果我分配给另一个作用域变量并关闭它,它将失败。

val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)
myScope.close()
val presenter2 = myScope.get<Presenter>(Presenter::class.java) // Crash here.

类似地,如果我这样做,它也会崩溃

val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)
myScope.close()
myScope.getOrCreateScope() // Crash here
val presenter2 = myScope.get<Presenter>(Presenter::class.java)

我了解close()之后,示波器无法再提供presenter。我只是不明白为什么myObject.scope.close()之后,myObject.scope仍然可以提供演示者? (和同一主持人)

val presenter = myObject.scope.get<Presenter>(Presenter::class.java)
myObject.scope.close()
val presenter2 = myObject.scope.get<Presenter>(Presenter::class.java) 
// presenter1 == presenter2
kotlin service-locator koin koin-scope
1个回答
0
投票

显然,myObject.scope实际上是myObject.getOrCreateScope()。因此,即使在调用myObject.scope.close()之后,myObject.scope仍将起作用,因为它将再次创建新的作用域。

© www.soinside.com 2019 - 2024. All rights reserved.