WhenActivated 在 ReactiveUI 中实际上是如何工作的?
How does WhenActivated actually work internally in ReactiveUI?
我试图了解视图 activation/deactivation 内部是如何工作的。这些是我一直在研究的一些文件 ReactiveUI repo:
ReactiveUI/Activation/ViewForMixins.cs
ReactiveUI/Platforms/windows-common/ReactiveUserControl.cs
ReactiveUI/Platforms/windows-common/ViewModelViewHost.cs
如果我理解正确的话,具有 WhenActivated
块的视图将在实例化后立即调用其激活指令。但是,我看不到视图何时停用(以及通过哪种机制),以及 WhenActivated
中定义的一次性用品是如何处理的。
在内部我们有一些不同的机制。
首先我们有一个 IActivationForViewFetcher
注册到我们的 Splat DI 容器。 ReactiveUI 然后查找 IActivationForViewFetcher
的注册,然后确定是否需要 activation/deactivate。当您有共同的基础 类 时,我们通常使用这种方法,例如在 WPF 上 Control
具有生命周期事件。
另一种方法是视图将派生出一个 ICanActivate
,它作为激活和停用的生命周期。
我们使用这两种机制来确定何时调用 WhenActivated
用户将他们想要处理的一次性资源注册为 CompositeDisposable
或 Func<IDisposable>
并注册他们的一次性资源.
然后当我们收到停用的调用时,我们将调用 Dispose()
那些已注册的 IDisposable
对象。
WhenActivated 不是最好的名字,因为它处理激活,而且基于注册的 IDisposable 它可以处理停用。
我试图了解视图 activation/deactivation 内部是如何工作的。这些是我一直在研究的一些文件 ReactiveUI repo:
ReactiveUI/Activation/ViewForMixins.cs
ReactiveUI/Platforms/windows-common/ReactiveUserControl.cs
ReactiveUI/Platforms/windows-common/ViewModelViewHost.cs
如果我理解正确的话,具有 WhenActivated
块的视图将在实例化后立即调用其激活指令。但是,我看不到视图何时停用(以及通过哪种机制),以及 WhenActivated
中定义的一次性用品是如何处理的。
在内部我们有一些不同的机制。
首先我们有一个 IActivationForViewFetcher
注册到我们的 Splat DI 容器。 ReactiveUI 然后查找 IActivationForViewFetcher
的注册,然后确定是否需要 activation/deactivate。当您有共同的基础 类 时,我们通常使用这种方法,例如在 WPF 上 Control
具有生命周期事件。
另一种方法是视图将派生出一个 ICanActivate
,它作为激活和停用的生命周期。
我们使用这两种机制来确定何时调用 WhenActivated
用户将他们想要处理的一次性资源注册为 CompositeDisposable
或 Func<IDisposable>
并注册他们的一次性资源.
然后当我们收到停用的调用时,我们将调用 Dispose()
那些已注册的 IDisposable
对象。
WhenActivated 不是最好的名字,因为它处理激活,而且基于注册的 IDisposable 它可以处理停用。