【发布时间】:2014-02-13 19:15:55
【问题描述】:
我正在使用 MVP 模式创建通过工厂加载到 Shell 中的视图模块:
public class ViewModuleFactory : IViewModuleFactory
{
private readonly IEventAggregator Events;
public ViewModuleFactory(IEventAggregator Events)
{
this.Events = Events;
}
public Control CreateModule()
{
var view = new View();
var presenter = new Presenter(Events, view);
return view;
}
}
模块加载到 shell 后,我通过 Prism 事件聚合器触发一个事件来填充模块。然而,我发现它永远不会填充。我的结论是演示者(处理事件)正在收集垃圾,因此发布的事件被置若罔闻。我已经通过创建析构函数并对其进行断点来确认这一点。
我可以确定可能的解决方案,但它们带有警告:
1) 我想将KeepSubscriberReferenceAlive 设置为true,但是another SO answer states this should be a rare occurrence。
2) 我可以为 view 提供对其 presenter 的引用,但我的阵营认为 view 应该是完全愚蠢的,并且与演示者无关。
3) 我可以为ViewModuleFactory 提供对Presenter 的字段引用。工厂在程序的生命周期内一直存在,因此演示者参考被保留,但我觉得这可能会完全打开另一罐蠕虫。
真正奇怪的是,我在 ViewFactory 中有另一个模块,它的加载方式完全相同,但不知何故,演示者并没有像现在这样完成。
任何帮助将不胜感激。
【问题讨论】:
标签: c# winforms events garbage-collection mvp