Vac*_*ano 1 c# wpf prism unity-container eventaggregator
我试图让我的IEventAggregator允许我在一个模块中发布和事件,并在另一个模块中捕获它.我在单个模块/项目中尝试了下面的代码,效果很好.它只在我有一个模块/项目发布事件而另一个订阅它时失败.
我已经通过统一将我的IEventAggregator注入到两个模块中.
我有3个项目,其中两个有模块(称为A和B),一个只是一个普通的类库(称之为接口)
在类库接口中有以下代码:
public class RandomTestEvent : CompositePresentationEvent<string>
{
}
Run Code Online (Sandbox Code Playgroud)
在模块A中,按钮单击命令中存在此代码(这实际上在项目中的视图模型中):
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Publish("Testing");
Run Code Online (Sandbox Code Playgroud)
在模块B中有以下代码:
public void Initialize()
{
var evt2 = _eventAggregator.GetEvent<RandomTestEvent>();
evt2.Subscribe(OnRandomThingDone);
}
private void OnRandomThingDone(string obj)
{
MessageBox.Show("Random Event Done With: " + obj);
}
Run Code Online (Sandbox Code Playgroud)
我可以追踪,我看到订阅被调用.当我看到Publish geting时调用者说Subscriptions = 1(因此它知道订阅已经完成,所以我似乎没有2个不同的IEventAggregator实例.)
但OnRandomThingDone永远不会在发布后调用.
任何想法为什么?(我需要发布更多代码吗?如果有,请告诉我.)
实际上随机猜测 - 您的订阅者在事件发布之前获得了GC'd - 因为Prism的CompositePresentationEvent的默认行为是使用WeakReferences来保留订阅者目标引用.
所以...尝试调用Subscribe重载,它允许你指定keepSubscriberReferenceAlive并传入true.
如果您的订阅者成功收到该事件,则表示您的包含OnRandomThingDone的类超出范围并在事件发布之前获取GC.
随机API参考:http: //msdn.microsoft.com/en-us/library/ff921122 (PandP.20).aspx
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |