我使用MVP模式创建经由工厂装载到外壳视图模块:保持演示参考活着但无视图给出参考它控制
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 Event Aggregator触发事件来填充模块。然而,我发现它永远不会生存。我的结论是,主持人(负责处理该事件)正在收集垃圾,因此公布的活动充耳不闻。我通过创建一个析构函数并对其进行了简化来确认这一点。
我可以找出可能的解决方案,但他们提出的警告:
1)我想设置KeepSubscriberReferenceAlive
为真,但another SO answer states this should be a rare occurrence的。
2)我可以给view
参考其presenter
,但我认为view
应该是完全愚蠢的,并且没有提及演示者。
3)我可以给ViewModuleFactory
一个字段引用Presenter
。工厂在该计划的生命中保持活力,因此主讲人的参考资料得以保留,但我认为这可能会完全打开另一个蠕虫。
什么是真正奇怪的是,我在加载完全相同的方式ViewFactory
另一个模块,但不知何故,该演示是没有得到最终确定这样的一个。
任何帮助,将不胜感激。