首页 > 解决方案 > WhenActivated 在 ReactiveUI 内部实际上是如何工作的?

问题描述

我试图了解视图激活/停用如何在内部真正起作用。这些是我在ReactiveUI存储库中研究的一些文件:

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

标签: c#reactiveui

解决方案


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

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

另一种方式是 View 将派生 a ICanActivate,它作为其上的 Activated 和 Deactivated 生命周期。

我们使用这两种机制来确定何时调用WhenActivated用户注册他们想要作为 aCompositeDisposable或 a处置Func<IDisposable>的一次性用品并注册他们的一次性资源。

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

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


推荐阅读