c# - WhenActivated 在 ReactiveUI 内部实际上是如何工作的?
问题描述
我试图了解视图激活/停用如何在内部真正起作用。这些是我在ReactiveUI存储库中研究的一些文件:
ReactiveUI/Activation/ViewForMixins.cs
ReactiveUI/Platforms/windows-common/ReactiveUserControl.cs
ReactiveUI/Platforms/windows-common/ViewModelViewHost.cs
如果我理解正确,具有WhenActivated
块的视图将在实例化后立即调用其激活指令。但是,我看不到视图何时停用(以及通过哪种机制),以及如何处置定义的一次性用品WhenActivated
。
解决方案
在内部,我们有一些不同的机制。
首先我们有一个IActivationForViewFetcher
在我们的 Splat DI 容器中注册的。ReactiveUI 然后查找 的注册,IActivationForViewFetcher
然后从中确定是否需要激活/停用。当您有公共基类时,我们通常使用这种方法,例如在Control
具有生命周期事件的 WPF 上。
另一种方式是 View 将派生 a ICanActivate
,它作为其上的 Activated 和 Deactivated 生命周期。
我们使用这两种机制来确定何时调用WhenActivated
用户注册他们想要作为 aCompositeDisposable
或 a处置Func<IDisposable>
的一次性用品并注册他们的一次性资源。
然后当我们得到一个停用的调用时,我们将调用Dispose()
那些注册的IDisposable
对象。
WhenActivated 不是最好的名字,因为它处理的是Activation,而且基于注册的IDisposable它可以处理deactivation。
推荐阅读
- python - 永久更改字符串的 Python 函数
- r - 从虚拟变量中创建因子并计数
- python - 你如何将数据框转换为二维 numpy 数组
- php - OneSignal:仅向一位用户发送推送通知
- java - 如何用 Spring 或 POJO 类替换 org.jboss.resteasy.core.ResourceMethodInvoker
- python - 随着阶数的增加,巴特沃斯滤波器看起来很奇怪
- haskell - 什么是“你调用的函数”,什么是“调用你的函数”?
- python - 如何知道列表中的元素是否在另一个列表中
- excel - 无法获取 WorksheetFunction 类的 SumProduct 属性
- r - Webscraping 具有可变长度的 html 表 - 在构建数据框时,如何确保我的数据最终出现在正确的列中?