【发布时间】:2013-05-09 10:22:13
【问题描述】:
我有一些模块在关闭时需要做一些整理工作,但是 PRISM/Unity 似乎不尊重 IDisposable 接口。有人对我如何使这项工作有任何建议吗?
【问题讨论】:
-
我的回答对你有帮助吗?
标签: wpf mvvm prism unity-container
我有一些模块在关闭时需要做一些整理工作,但是 PRISM/Unity 似乎不尊重 IDisposable 接口。有人对我如何使这项工作有任何建议吗?
【问题讨论】:
标签: wpf mvvm prism unity-container
我遇到了同样的问题,然后这样解决了:
首先,我创建了一个自定义事件,以允许我向我的模块发出容器正在关闭的信号:
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 方法中。
希望这会有所帮助。
【讨论】:
很可能您的模块没有被释放,因为它们在容器中注册为单例(共享)组件。
Dispose()您的容器手动在Application.Exit 上,并且您的所有一次性模块(以及该容器中其他已解析的共享一次性组件)都应该调用其IDisposable.Dispose() 方法。
【讨论】: