问题描述
在多个viewmodel中调用相关的dispose函数的正确方法是什么,以确保在shell窗口关闭之前成功释放这些资源(对象)?我在 WFP 应用程序中使用 Prism (v6)。
试图在 shell 视图的代码隐藏文件中注册 shell_viewmodel,然后在 shell 关闭事件上向所有订阅的视图模型触发 pubsub 事件,但遗憾的是从未触发 pubsub 事件,因此资源在视图模型中没有被处理。
背后的逻辑,我需要为几个模块注册一个 sqlTableDependency (sqlbroker) 并想关闭它们,在 shell 关闭之前数据库侦听器正在被删除。
对此有什么想法吗?我真的很纠结这个...
解决方法
您可以使用 Application.OnExit
发布事件。您必须从引导程序中获取容器实例并将其存储,当然,以解析 OnExit
中的事件聚合器。
示例:
internal partial class App
{
protected override void OnStartup( StartupEventArgs e )
{
base.OnStartup( e );
_bootstrapper = new MyBootstrapper();
_bootstrapper.Run();
}
protected override void OnExit( ExitEventArgs e )
{
base.OnExit( e );
_bootstrapper.Container.Resolve<IEventAggregator>().GetEvent<ApplicationExitingEvent>().Publish();
}
#region private
private Bootstrapper _bootstrapper;
#endregion
}