EventAggregator应该用于点对点还是广播消息传递

时间:2013-10-01 17:16:47

标签: c# wpf caliburn.micro

我在Windows Phone 8应用程序中使用Caliburn.Micro中的EventAggregator

视图模型有很多地方可以实现IHandle<SomeClass>

我的问题是,当SomeClass的对象发布时,即使它们可能不是预期的收件人,也会处理多个类。那么处理这个问题的最佳方法是什么....

  1. 设计具有不同名称​​(但内容基本相同)的消息类,以便视图模型之间的所有通信都是严格的点对点?

  2. 或者将一个源属性放在消息类中,以便所有接收者都知道消息的来源,以便可以有条件地处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

这个问题没有正确或错误的答案。我认为:

  1. 有些情况下,您需要点对点,并且可以仅为此目的使用特定的消息类型(类)
  2. 有些情况下您需要像(广播)行为这样的事件
  3. 您也可以使用System.Threading.Task中的主动取消进行广播,或者像WPF事件模型中的广播一样,其中每个处理程序都是访问者,并且可以设置事件参数的Handled标志(说SomeClass)为true,以便其他处理程序知道他们不应该再处理它了。
  4. 此外,名称EventAggregator通常指出这样一个事实,即最常见的用途是聚合处理程序,即进行广播(至少这是我所看到的)

    将WPF事件模型视为一个类比..你提出事件(发布它)但不关心你拥有多少处理程序或者他们正在做什么。