WhenActivated 在 ReactiveUI 中实际上是如何工作的?

How does WhenActivated actually work internally in ReactiveUI?

我试图了解视图 activation/deactivation 内部是如何工作的。这些是我一直在研究的一些文件 ReactiveUI repo:

如果我理解正确的话,具有 WhenActivated 块的视图将在实例化后立即调用其激活指令。但是,我看不到视图何时停用(以及通过哪种机制),以及 WhenActivated 中定义的一次性用品是如何处理的。

在内部我们有一些不同的机制。

首先我们有一个 IActivationForViewFetcher 注册到我们的 Splat DI 容器。 ReactiveUI 然后查找 IActivationForViewFetcher 的注册,然后确定是否需要 activation/deactivate。当您有共同的基础 类 时,我们通常使用这种方法,例如在 WPF 上 Control 具有生命周期事件。

另一种方法是视图将派生出一个 ICanActivate,它作为激活和停用的生命周期。

我们使用这两种机制来确定何时调用 WhenActivated 用户将他们想要处理的一次性资源注册为 CompositeDisposableFunc<IDisposable> 并注册他们的一次性资源.

然后当我们收到停用的调用时,我们将调用 Dispose() 那些已注册的 IDisposable 对象。

WhenActivated 不是最好的名字,因为它处理激活,而且基于注册的 IDisposable 它可以处理停用。