PRISM 通过每个导航请求创建新的 ViewModel?

PRISM creates new ViewModel by each navigation request?

我正在为 UWP 应用程序使用 Prism v6.3.0。我正在使用 DI 的 Unity 容器。 出现以下问题:每当我的应用程序导航到给定视图(例如 MainPage)时,似乎会创建相应 ViewModel 的新实例。我想重复使用同一个虚拟机(基本上,只创建一次)。
我有: prismMvvm:ViewModelLocator.AutoWireViewModel="True" 在所有页面的 XAML.
我的代码从不直接调用任何 VM 构造函数,所以不可能那样。我还在 ConfigureContainer 覆盖中仅注册服务。

我试过的是在 App.xaml.cs 中注册视图(这似乎没有什么区别):

private void RegisterViews()
{
        Container.RegisterInstance(new LoginPage(), new ContainerControlledLifetimeManager());
        Container.RegisterInstance(new SettingsPage(), new ContainerControlledLifetimeManager());
        Container.RegisterInstance(new MainPage(), new ContainerControlledLifetimeManager());
}

有什么提示吗?

既然没人回答,我又试着自己弄明白了。 现在,我知道最好的方法可能是修改 Prism 使用的容器,以便将所有 VM 注册为单例。因为这个问题听起来工作量太大,所以我选择先看一下 ViewModelLocationProvider class。 PRISM 使用 ViewModelLocationProvider 查找给定视图的 VM(AutoWireViewModel 设置为 true)并将找到的 VM 类型注入给定视图的 DataContext。

我尝试为给定视图想出一个工厂,以确保只会创建一个 VM 实例,并找到了以下解决方案:

protected override void ConfigureViewModelLocator()
    {
        base.ConfigureViewModelLocator();
        ViewModelLocationProvider.Register<MainPage>((delegate
        {
            var vm = Container.Resolve<MainViewModel>();
            if (Container.Registrations.All(r => r.RegisteredType != typeof(MainViewModel)))
                Container.RegisterInstance<MainViewModel>(vm, new ContainerControlledLifetimeManager());
            return vm;
        }));

        ViewModelLocationProvider.Register<SettingsPage>((delegate
        {
            var vm = Container.Resolve<SettingsViewModel>();
            if (Container.Registrations.All(r => r.RegisteredType != typeof(SettingsViewModel)))
                Container.RegisterInstance<SettingsViewModel>(vm, new ContainerControlledLifetimeManager());
            return vm;
        }));
        
    }