问题标签 [eventaggregator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - 复合 WPF EventAggregator 订阅丢失
在我的复合 WPF 应用程序中,我有一个事件,当用户双击控件时发布。模块订阅事件并在必要时执行操作。
此事件似乎随机停止工作。有时当我运行应用程序时,我可以毫无问题地触发事件,有时我只能在模块停止接收事件之前触发它几次。
当我查看调试器时,CALEventAggregator
仍然有事件,但事件没有订阅。怎么EventAggregator
会失去订阅?
java - Java的事件聚合器?
是否有相当于 Microsoft 的 Prism EventAggregator for Java?
c# - 如何在我的模块的构造函数中发布事件?
当我尝试在我的客户模块中发布事件时,它不起作用(订阅者没有收到对象,不显示任何内容):
但是,如果我解决这个问题,以便将视图加载到调用视图模型中的命令的区域中,该命令发布事件,然后我停用视图,那么它可以工作:
看法:
视图模型:
我怎样才能简单地在模块的构造函数中发布事件而不是做这个奇怪的解决方法?
wpf - 为什么我的 Moq IEventAggregator 验证失败?
我使用复合 WPF(棱镜),我试图单元测试我的控制器确实订阅了复合事件。
我的订阅代码如下...
我的单元测试代码如下所示(我使用 Moq 作为我的 Mocking 框架和 Unity 作为我的 DI 框架)...
正在调用此订阅方法(我已通过使用调试器运行验证),但验证始终失败,并显示“未在模拟上执行调用:e => e.Subscribe ...”
知道我做错了什么吗?
castle-windsor - Windsor Castle:连接容器的解析和释放机制
当 IoC 容器创建侦听器时,我正在尝试将我的侦听器自动注册到单例事件聚合器- 基本上是 Jeremy D. Miller 正在做的事情,但使用的是 Castle 而不是 StructureMap。
所以我希望能够“拦截”Windsor 的对象创建机制,如果对象支持标记接口(比方说IListener
),则将Subscribe
方法调用到一个EventAggregator
(也注册在容器中)以使新创建的对象成为订阅者到事件。此外,在容器释放对象实例之前,我希望能够取消订阅它。
我对温莎城堡中应该使用什么机制来实现这样的事情有点困惑?我开始查看IInterceptor
接口,但它似乎拦截了对对象的所有调用,这不是我真正需要的(并且出于性能原因想要避免)。
communication - EventAggregator vs CompositeCommand
我通过 Prism 指导工作,并认为我掌握了他们的大多数通信工具。
命令非常简单,因此很明显,DelegateCommand 将仅用于将 View 与其 Model 连接起来。
当涉及到跨模块通信时,特别是何时使用 EventAggregation 而不是复合命令时,这有点不太清楚。
实际效果是一样的,例如
- 您发布一个事件 -> 所有订阅者都会收到通知并执行代码作为响应
- 您执行一个复合命令->所有已注册的命令都被执行并附带它们的代码
两者都按照“触发并忘记”的方式工作,即他们不关心触发事件/执行命令后订阅者的任何响应。
尽管我知道两者的实现(在引擎盖下)非常不同,但我很难看到使用上的实际差异。
那么我们是否应该考虑一下它的实际含义——事件?那是当事情发生(事件发生)时吗?用户没有直接请求的东西,比如“网络请求已完成”?
指挥部呢?这是否意味着用户点击了某些东西,从而向我们的应用程序发出命令,直接请求服务?
是这样吗?或者是否有其他方法可以确定何时使用其中一种通信工具而不是另一种。该指南虽然是我读过的最好的文档之一,但没有给出具体解释。
所以我希望参与/使用 Prism 的人可以帮助阐明这一点。
c# - 从 Prism 中的导航控件动态加载视图的最佳方法是什么
我已经使用菜单控件在我的应用程序中实现了导航,该控件在单击菜单项时使用 EventAggregator 发布事件。如下图所示,
我的应用程序中的大多数模块都是此事件的订阅者。他们使用过滤器仅订阅与模块相关的事件
查看请求的处理方式如下:
你如何评价这个实施?如果您认为它很糟糕,请帮助我改进它或提出更好的替代方案。
c# - 我应该如何从 P&P 为 EventAggregator 创建事件,以便 UI 线程上的订阅者可以收听它们?
我正在尝试在后台任务运行时更新主窗体中的进度条。
我正在使用来自最新模式和实践发布的 EventAggregator 路由我的应用程序范围的事件。
我正在从一个监听 BackgroundWorker 事件的类中触发一个事件,然后像这样触发一个事件:
- BW 上的进程触发 BW 方法以报告进度。
- BW 触发它的报告事件。
- 它们被在 BW 启动之前设置的 SomeCommand 类方法拾取。
- 我从 EventAggregator 发布事件
public void ProgressChanged(对象发送者,ProgressChangedEventArgs ea){ KnownProgressStatusChangedEvent evt = KernelKeeper.Kernel.Get().GetEvent(); evt.Publish(ea); }
我的 MainPresenter 已经订阅了这些事件:
如果我不设置 ThreadOption.UIThread,我会在 Program.cs 中得到 TargetInvokationException,并且没有堆栈跟踪。这样我就没有例外,我可以进入 EventAggregator。
当它即将调用 KnownProgressChanged 方法时,它会尝试调用它并检查Application.Current != null
. 它是空的,没有任何东西被解雇。
我究竟做错了什么 ?请指教。
.net - Prism 事件聚合 - 未触发订阅者
我正在使用 Prism 实现事件聚合。我有几个模块,我希望他们每个人都订阅事件,告诉他们什么时候被请求。我开始在 shell 中使用订阅和发布者做一个简单的示例。那里没有问题。现在; 当我将订阅者移到我的模块时,他们不会被触发。更奇怪的是它实际上已经工作了几次——所有这些我都在断点处等待。所以在我看来这是一些比赛条件,但我不明白为什么。
假设:我不需要在任何地方设置 IEventAggregator - 例如在 IoC 容器中注册?这是内置在 Prism 中的,因此我只有一个事件聚合器实例,对吗?
所以,问题基本上是我应该如何/在哪里/何时设置我的订阅者。东西等有特定的顺序吗?在我的简化示例中,我有一个模块 MyModule。Bootstrapper 会将 MyModule 添加到目录中 - 使其初始化:
MyModule 将存储聚合器并使用它来订阅 MyModuleRequestedEvent。它还使用菜单注册表在应用程序菜单中注册。这个想法是最终点击菜单应该触发事件 - 通知 MyModule 它已被请求。然后我希望 MyModule 有责任弄清楚下一步该做什么。
现在,我的 shell 中有一个按钮,它将发布此事件。解析时,shell 会获得相同的 (?) 事件聚合器。
笔记:
- 已验证事件已发布。在 shell 中添加订阅者也会使该订阅者接收事件。
- 再次; MyModule 中的订阅者没有被触发。然而,奇怪的是,它已经出现过几次了。
- 我不使用事件的输入。似乎您需要一些输入类型,所以我只使用了一个虚拟布尔值。我可以摆脱这个..?
.net - 屏幕同步 - 事件聚合器 VS 缓存 ViewModel 参考
我做了一些功课,找不到任何关于何时使用每种方法的最佳实践的文章。
只是为了澄清: 当使用事件聚合器模式时:每个屏幕都有它自己的视图模型引用,视图模型使用 eventtaggregator 发布更改,稍后观察者使用它来同步他们的状态。
缓存视图模型:每个屏幕都有视图模型的保存引用,绑定到视图模型属性的控件是同步的,因为应用程序中的每个屏幕都有相同的视图模型引用(从缓存中获取),所有由于数据绑定,屏幕是同步的。
何时使用每种方法?使用它们每个的优点是什么?