- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Pattern of pub-sub events is that the publisher should not know or care if there are any subscribers out there, nor should it care what the subscribers do if they are there (from Brian Noyes' blog)
最佳答案
您的帖子中有很多问题可以回答“这取决于您的应用程序”,但我会尝试回答其中的一些问题。
我在 EventAggregator 中最常看到的一件事是滥用。许多人使用 EventAggregator 的方式使发布者和订阅者相互依赖。这给我带来了我的第一个建议:
永远不要假设某个事件有任何订阅者。
EventAggregator 对于发布其他 View 可能感兴趣的事件很有用。例如,在我们的应用程序中,我们允许用户更改某人的姓名。此名称可能会显示在应用程序中已打开的其他 View 上(我们有一个选项卡式 UI)。我们的用例是我们希望在更改名称时更新这些 UI,因此我们发布了一个“UserDataChanged”事件,以便打开的 View 可以适本地订阅和刷新它们的数据,但是如果打开的 View 没有对此数据感兴趣,未通知订阅者。
在适当的情况下优先使用 .NET 事件而不是 EventAggregator 事件
我经常看到的另一个错误是使用 EventAggregator 实现的业务流程,其中数据被发送到中央方,然后该方回复,所有这些都使用 EventAggregator。这会导致您可能希望避免的一些副作用。
我看到很多变化是从父 View 到 subview 的通信,反之亦然。诸如“TreeItemChecked”或“ListViewItemSelected”之类的东西。在这种情况下,将使用传统的 .NET 事件,但作者决定,如果他们有一把锤子 (EventAggregator),那么一切 (Events) 看起来都像钉子。
您询问了 建模 EventAggregator 我想说的是:EventAggregator 的特殊之处在于它允许解耦并且不会创建对事件的强引用(避免内存泄漏等)。除此之外,它实际上只是 Observer Pattern 的一个非常轻微的变化 .但是,您正在建模 Observers 是如何在您尝试创建的任何类型的图表中对 EventAggregator 进行建模。
关于你关于 的问题确保某个模块或另一个订阅了事件 : 你没有 .如果您需要确保有订阅者,则不应使用 EventAggregator。在这些情况下,我会推荐在您的应用程序中运行的服务,模块可以从您的容器中获取并使用或其他类似的东西。
关于你的模块要记住的是,你应该能够正常地完全删除一个和其余的应用程序功能。如果不是这种情况,你要么有模块依赖(最好避免,但可以理解),或者依赖模块应该合并为一个。
关于prism - 如何设计 Prism 事件聚合器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705658/
我想将使用 Prism 4 编写的项目迁移到 Prism 6。 在 Prism 4 中 CompositePresentationEvent类型位于Microsoft.Practices.Compos
Pattern of pub-sub events is that the publisher should not know or care if there are any subscribers
我刚刚使用 MVVMLight、PRISM 和 DryIoc 启动了我的第一个 WPF 应用程序。 App.xaml 引用 prism:PrismApplication,如 https://prism
Microsoft 的 Patterns and Practices 提供的示例非常有用: 大约六个更简单的快速入门 其中涉及具体问题 股票交易者引用实现 ,这是一个相当全面的应用程序 但它缺乏更有用
prism 中共享服务的目的和用途是什么? 哪些事情会让我认为我必须使用共享服务而不是 Event Aggregator? 最佳答案 从事件订阅者的角度来看 EventAggregator,它有利于获
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 Improve this qu
寻找一个简单的 helloWorld EventAggregator 示例。我试图理解这一点,并且在遵循 RI 示例时遇到了一些困难。 谢谢 N 最佳答案 Prism 4.0 包括 EventAggr
我只是想知道区域的意义是什么。我想我不明白他们解决的问题。 例如,我看到很多人使用区域作为导航区域,但是为什么不将 ItemsControl 绑定(bind)到 ObservableCollectio
最近想将我的 WPF Prism 应用程序迁移到 7.1,这样做时我遇到了有关 Unity.Abstractions 的丢失引用错误。 将 Prism nuget 软件包升级到 Prism7.1,如下
在我的根 View 模型中,我称之为 await _navigationService.NavigateAsync( "/NavigationPage/Page1of2", useMo
在 2.1.x 时间框架中讨论了与 Prism 的集成,我们是 @2.4.x,Prism 4 现已推出,/contrib 中的 RIStockTrader 示例只是一个默认的 XAML 项目。 它应该
我正在使用 Prism4,并且在我的一个模块中,我试图用一个区域注册一个 View ,并处理它的按钮单击事件(当用户单击 View 上的按钮时发布)。 public class MyModule :
几个月来,我一直在将 Prism 2.0 用于个人项目。我最近听说过 Caliburn,我想知道是否有令人信服的理由让我考虑这样做。 我喜欢 Prism 的动态模块加载能力。我打算为我的应用程序构建模
我正在尝试对我的 Windows 应用商店应用程序中的暂停事件使用react。我添加了适当的回调方法,但遇到了问题: App.Current.Suspending += Current_Suspend
我目前正在尝试完成 this tutorial让 Prism 与 Spring.net 一起工作。 通过 NuGet(或手动引用程序集)引用 Prism4 和 Spring.Net 后,设置 Boot
几个月来,我一直在使用带有以下 XAML 命名空间声明的 Prism 6: xmlns:prism="http://www.codeplex.com/prism" 但我注意到这个命名空间 URL(重定
我在 PRISM 中实现应用程序,它需要从 dll 文件中动态导入模块。我设法做到了 - 他们正在导入,但我无法显示它。我决定创建一个特殊的模块来封装它——让我们称之为 ModuleDock。所以我们
我要创建的是一个 Silverlight 应用程序,其中包含几个选项卡/模块,这些选项卡/模块都是单独的 DLL。 我看到 PRISM 具有似乎针对 UI 的 Shell/Module 概念,并且我找
请帮忙 - 我迷路了! 我正在编写一个具有一些控件和一些屏幕的小型桌面应用程序。这应该稍后与一个小型网站集成,也有一些屏幕。这个想法是让用户编辑视频并选择图像,然后与她的 friend 分享他们的结果
我在使用方法时遇到问题 this.regionManager.RegisterViewWithRegion("TextRegion", typeof(TextView)); 如果我以某种方法在 Boo
我是一名优秀的程序员,十分优秀!