c# - 事件发布和订阅如何在 ON DEMAND 环境中工作
问题描述
我在 SoftwareViewModel 构造函数中订阅了一些事件,我想以某种方式将特定视图和 Viewmodel 移动到单独的 MODULE 中并按需进行
但是为了使事件发布和订阅工作我们需要在应用程序加载时加载该 SoftwareViewModel,即为了使 SoftwareViewMOdel 的订阅工作。
那么事件发布和订阅如何在 ONDEMAND Viewmodel 概念中工作。
我的想法是否可行,因为 SoftwareViewModel 的行为取决于我们登录应用程序时加载的设置。
**//Want to make this viewmodel ON DEMAND**
public SoftwareViewModel()
{
**//Event that is going to subscribed**
SubscriptionToken subscriptionValidate = this.eventAggregator.GetEvent<PubSubEvent<IValidate>>().Subscribe(i =>
{
//CODE HERE
});
}
关于 On Demand 的一些解释: On Demand 我今天的意思是我有两个选项卡 1 和 2。我希望我的选项卡 2 的东西应该在我单击选项卡 2 时加载,即 SoftwareViewModel OnDemand。
但我的选项卡 -1 有一些设置对 SoftwareViewModel 即选项卡 2 产生影响。为了做到这一点,我使用事件订阅和发布来共享选项卡 1 和 2 之间的数据。
但我想在点击 tab-2 时做所有事情。
问题:是否可以通过事件发布和订阅来按需制作 SoftwareViewModel 即 tab-2,因为根据我的研究,发布仅在订阅首先注册时才有效。
如果需要更多描述,请告诉我。
解决方案
您的理解是正确的;典型的 pub/sub 应用程序中的订阅将仅接收在订阅建立后发布的事件。
这就是为什么 pub/sub 基本上从来都不是视图(模型)接收数据的唯一方式。
为了更清楚,让我们从第二个用例开始。即先tab-2
入。永远不会被创建。那你怎么得到数据呢?不仅没有在正确的时间订阅,而且它正在寻找的事件从未发布过!tab-1
tab-2
此外,在第三种情况下,saytab-1
实际上是一个不同的过程。tab-2
可能对在进程开始之前发生的事件感兴趣!
所有用例的解决方案都是相同的;视图(模型)(tab-2
此处)必须能够查询系统的当前状态。“获取,然后订阅其余部分。” 查询和响应可以通过您的 pub/sub 系统(已经构建,它的工作量很大),也可以通过其他方法。
TL;DR:您不能仅仅依靠简单的发布/订阅来获取初始数据。
推荐阅读
- docker - docker -v 选项只有一个字段
- apache-kafka-streams - 默认retention.ms 未能为selectKey() 创建内部更改日志主题
- email - 使用 informatica 在目标中触发成功行计数的电子邮件
- python - Python:如何将带有“”的数据输出到CSV?
- angular - Auth0 3 次 localauthsetup 失败,后来我可以路由到主页
- python - 如果多个大文本文件太大而无法单独转换,如何将它们转换为一个 CSV 文件?
- javascript - 更新 vue 子组件中的 props 值
- cryptography - 如何使用同构变换函数和同构逆变换函数创建矩阵?
- flutter - Flutter - 物理键盘输入键在提交的文件上不起作用
- python - 匹配条件后如何更新/替换嵌套循环内的列表项?