我有一些模块在关闭时需要做一些整理工作,但看起来PRISM / Unity似乎不尊重IDisposable接口。有没有人对如何使这项工作有任何建议?
答案 0 :(得分:2)
我遇到了同样的问题,并解决了这个问题:
首先,我创建了一个自定义事件,以便让我向模块发出信号,告知容器正在关闭:
public class ApplicationExitEvent : CompositePresentationEvent<string> { }
然后在我的引导程序中,我实现了IDisposable并在我的Dispose()方法中触发事件:
public void Dispose()
{
var eventAggregator = Container.Resolve<IEventAggregator>();
if (eventAggregator != null)
{
eventAggregator.GetEvent<ApplicationExitEvent>().Publish("");
}
}
然后在我的模块的Initialize()方法中,我订阅了这个事件:
EventAggregator.GetEvent<ApplicationExitEvent>().Subscribe((o) => Dispose(), true);
在我的模块的Dispose方法中放入我需要的清理代码。
希望这有帮助。
答案 1 :(得分:0)
很可能你的模块没有被丢弃,因为它们在容器中被注册为单件(共享)组件。
在Dispose()
上手动 Application.Exit
您的容器,并且所有一次性模块(以及此容器中其他已解析的共享一次性组件)应调用其IDisposable.Dispose()
方法。