【发布时间】:2016-03-08 17:24:32
【问题描述】:
我正在根据找到的项目/对象构建一个列表。当找到这些对象时,我希望它们使用 prism/IEventAggregator 订阅事件。它们都是相同类型的对象,但我不希望它们订阅相同的事件。即使它们属于同一类型,我也希望它们具有独特的订阅。因此,当我发布事件时,我可以将其定向到每个唯一/特定对象。有人有想法吗?这是否可行?
【问题讨论】:
我正在根据找到的项目/对象构建一个列表。当找到这些对象时,我希望它们使用 prism/IEventAggregator 订阅事件。它们都是相同类型的对象,但我不希望它们订阅相同的事件。即使它们属于同一类型,我也希望它们具有独特的订阅。因此,当我发布事件时,我可以将其定向到每个唯一/特定对象。有人有想法吗?这是否可行?
【问题讨论】:
为您创建的每个对象设置唯一的事件类型会非常麻烦,并且可能扩展性很差。但是,您可以在事件对象上拥有一个属性,该属性将是您要将事件定向到的特定实例。
订阅者(您的对象)都会收到事件通知,但会检查“接收者属性”以查看事件是否适合他们。如果不是,他们会忽略它,否则采取行动。
伪代码:
public class MyEvent {
public MyClass Recipient { get; set; }
}
public class MyClass {
public MyClass(IEventAggregator evt) {
evt.Register<MyEvent>(TakeAction);
}
private void TakeAction(MyEvent event) {
if (!event.Recipient == this) {
return;
}
// Perform the action
}
}
【讨论】:
使用单个事件并传递包含有关事件信息的有效负载。然后订阅者可以根据您随事件发送的有效负载过滤事件。
【讨论】: