当 Shell 关闭所有相关的 ViewModels with Prism6 for WPF 时,如何正确调用 Dispose 函数来清理资源?

How to properly call Dispose function to clear up resources when Shell is closing on all related ViewModels with Prism6 for WPF?

在多个视图模型中调用相关 Dispose 函数的正确方法是什么,以确保在 shell window 关闭之前成功处理这些资源(对象)?我在 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
}