【问题标题】:How does the Event Aggregator pattern manage its different publishers for its subscribers?事件聚合器模式如何为其订阅者管理不同的发布者?
【发布时间】:2012-10-20 19:42:24
【问题描述】:

在事件聚合器模式中,发布者将事件发布到聚合器,订阅者通过聚合器订阅特定事件。

假设有 3 个订阅者,SubscriberASubscriberBSubscriberC。他们都想订阅一个名为OnPowerUpEvent 的事件。 OnPowerUpEvent 可以被PowerItemAPowerItemB 触发。 PowerItemAPowerItemB 也可以有多个实例

基于这种情况,我不明白事件聚合器模式如何能够允许订阅者订阅特定发布者发布的事件。在我看来,订阅者一般只能订阅事件OnPowerUpEvent,无论发布者是谁,都可以响应事件。

例如,SubscriberA 可能想要订阅由任何 PowerItemA 实例发布的事件OnPowerUpEventSubscriberB 可能想要订阅由PowerItemB特定实例 发布的事件OnPowerUpEvent。而SubscriberC 通常可能想要订阅OnPowerUpEvent 事件,无论发布者是谁。

在这 3 种不同的情况下,事件聚合器模式如何管理?

【问题讨论】:

    标签: events design-patterns event-handling eventaggregator


    【解决方案1】:

    Popular Event Aggregator 实现不仅提供简单的发布/订阅功能,还提供更复杂的订阅过滤基础设施,例如 Prism EventAggregator 允许提供谓词和处理程序:(see MSDN)

    FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>();
    
    fundAddedEvent.Subscribe(FundAddedEventHandler, 
                             ThreadOption.UIThread, false,
                             fundOrder => fundOrder.CustomerId == _customerId);
    

    【讨论】:

    • 对于 lambda 表达式中的fundOrder 参数,fundAddedEvent 将传递给它什么?从 MSDN 中,要发布一个事件,这称为:EventAggregator.GetEvent&lt;TickerSymbolSelectedEvent&gt;().Publish(“STOCK0”); 似乎事件聚合器不会知道发布者是谁,是吗?
    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2010-12-21
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多