我使用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
另一個模塊,但不知何故,該演示是沒有得到最終確定這樣的一個。
任何幫助,將不勝感激。