Kotlin Koin:为什么在myObject.scope.close()之后,它仍然有效?

Kotlin Koin:为什么在myObject.scope.close()之后,它仍然有效?,kotlin,service-locator,koin,koin-scope,Kotlin,Service Locator,Koin,Koin Scope,我有望远镜 scope<MyObject> { scoped { Presenter() } } 显然,myObject.scope实际上是myObject.getOrCreateScope()。因此,即使在调用了myObject.scope.close()之后,myObject.scope仍将工作,因为它将再次创建一个新的作用域 但是,如果我们执行以下操作(关闭它),无论使用myScope还是myObject.scope,它都将关闭,因此从myScope再次使用它将崩溃

我有望远镜

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

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

但是,如果我们执行以下操作(关闭它),无论使用
myScope
还是
myObject.scope
,它都将关闭,因此从
myScope
再次使用它将崩溃

val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)
myObject.scope.close() // or myScope.scope
val presenter2 = myScope.get<Presenter>(Presenter::class.java) // this will crash
val myScope=myObject.scope
val presenter=myScope.get(presenter::class.java)
myObject.scope.close()//或myScope.scope
val presenter2=myScope.get(Presenter::class.java)//这将崩溃
请参阅下面的讨论和发现
显然,
myObject.scope
实际上是
myObject.getOrCreateScope()
。因此,即使在调用了
myObject.scope.close()
之后,
myObject.scope
仍将工作,因为它将再次创建一个新的作用域

但是,如果我们执行以下操作(关闭它),无论使用
myScope
还是
myObject.scope
,它都将关闭,因此从
myScope
再次使用它将崩溃

val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)
myObject.scope.close() // or myScope.scope
val presenter2 = myScope.get<Presenter>(Presenter::class.java) // this will crash
val myScope=myObject.scope
val presenter=myScope.get(presenter::class.java)
myObject.scope.close()//或myScope.scope
val presenter2=myScope.get(Presenter::class.java)//这将崩溃
请参阅下面的讨论和发现

怀疑Koin bug。在可疑Koin bug中提交问题。提交
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)
val presenter = myObject.scope.get<Presenter>(Presenter::class.java)
myObject.scope.close()
val presenter2 = myObject.scope.get<Presenter>(Presenter::class.java) 
// presenter1 == presenter2
val myScope = myObject.scope
val presenter = myScope.get<Presenter>(Presenter::class.java)
myObject.scope.close() // or myScope.scope
val presenter2 = myScope.get<Presenter>(Presenter::class.java) // this will crash