【发布时间】:2010-11-15 03:51:32
【问题描述】:
我试图让我的 IEventAggregator 允许我在一个模块中发布和事件并在另一个模块中捕获它。我在一个模块/项目中尝试了下面的代码,效果很好。只有当我有一个模块/项目发布事件而另一个订阅它时,它才会失败。
我已通过统一将 IEventAggregator 注入到两个模块中。
我有 3 个项目,其中两个有模块(称为 A 和 B),一个只是一个普通的类库(称为接口)
在类库Interfaces中有这样的代码:
public class RandomTestEvent : CompositePresentationEvent<string>
{
}
在模块A中有一个按钮点击命令中的代码(这实际上是在项目的视图模型中):
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Publish("Testing");
在模块B中有这样的代码:
public void Initialize()
{
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Subscribe(OnRandomThingDone);
}
private void OnRandomThingDone(string obj)
{
MessageBox.Show("Random Event Done With: " + obj);
}
我可以追踪并看到订阅被调用。当我看到 Publish 被调用时,调试器说 Subscriptions = 1(所以它知道订阅已完成,所以我似乎没有 2 个不同的 IEventAggregator 实例。)
但 OnRandomThingDone 在 Publish 之后永远不会被调用。
任何想法为什么? (我需要发布更多代码吗?如果需要,请告诉我。)
【问题讨论】:
-
订阅 SAME 模块中的事件,看看你的代码是否被调用。这会告诉你问题出在哪个模块。
标签: c# wpf unity-container prism eventaggregator