我正在构建一个 Prism 2.1 演示以跟上该技术的速度。我遇到了通过事件聚合服务发布和订阅的 CompositePresentationEvents 的问题。如果我设置一个强引用(KeepSubscriberReferenceAlive = true),事件订阅工作正常,但如果我设置一个弱引用(KeepSubscriberReferenceAlive 省略),它会失败。
我想订阅一个弱引用,这样我就不必管理取消订阅事件。有没有办法做到这一点?为什么这里需要强引用?谢谢你的帮助!
以下是详细信息:我的演示应用程序是单线程的,有两个区域,Navigator 和 Workspace,以及三个模块,NavigatorModule、WorkspaceAModule 和 WorkspaceBModule。NavigatorModule 有两个按钮,“显示工作区 A”和“显示工作区 B”。单击其中一个按钮时,将调用一个发布名为 ViewRequested 的 CompositePresentationEvent 的 ICommand。该事件携带一个字符串有效负载,指定应显示哪个工作区模块。
以下是来自应用的基础设施项目的事件声明:
using Microsoft.Practices.Composite.Presentation.Events;
namespace Prism2Demo.Common.Events
{
public class ViewRequestedEvent : CompositePresentationEvent<string>
{
}
}
这是来自 Navigator 模块的事件发布代码:
// Publish ViewRequestedEvent
var eventAggregator = viewModel.Container.Resolve<IEventAggregator>();
var viewRequestedEvent = eventAggregator.GetEvent<ViewRequestedEvent>();
viewRequestedEvent.Publish(workspaceName);
这是事件订阅代码,每个 Workspace 模块都包含在其 Initialize() 方法中:
// Subscribe to ViewRequestedEvent
var eventAggregator = m_Container.Resolve<IEventAggregator>();
var viewRequestedEvent = eventAggregator.GetEvent<ViewRequestedEvent>();
viewRequestedEvent.Subscribe(this.ViewRequestedEventHandler, ThreadOption.PublisherThread, true);
Subscribe() 语句与强引用一起显示。
再次感谢您的帮助。