我有范围
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
显然,myObject.scope
实际上是myObject.getOrCreateScope()
。因此,即使在调用myObject.scope.close()
之后,myObject.scope
仍将起作用,因为它将再次创建新的作用域。