在导航上重新创建Blazor单例对象

时间:2020-10-06 14:05:32

标签: c# blazor

在blazor中加载新页面时,我的单例对象不保持其状态。

我有这个界面:

public interface IPreLaunchSession
    {
        bool IsPreLaunchAuthenticated { get; set; }
    }

此接口的类

 public class PreLaunchSession : IPreLaunchSession
    {

        public bool IsPreLaunchAuthenticated { get; set; }

        public PreLaunchSession()
        {

        }
    }

我将其注册为单例

builder.Services.AddSingleton<IPreLaunchSession,PreLaunchSession>(); 

然后将其注入页面

@inject Services.IPreLaunchSession PreLaunchSession

在这些页面中,我测试了bool变量并对其进行了设置。

在另一部分代码中,我使用NavigationManager进行重定向。像这样:

Navigation.NavigateTo("/MyOtherPath");

这似乎可以工作一段时间,但是随后使用<NavLink/>转到另一页,一旦发生这种情况,就似乎重新创建了PreLaunchSession对象,并且其中的bool变量被重置为默认值(这是错误的)

这里的任何帮助都将有助于理解为什么导航发生时重新创建单例对象。

1 个答案:

答案 0 :(得分:1)

看看how to persist value in a singleton state container in blazor web assembly on page reload

刷新应用程序(F5等)时,该应用程序实际上已关闭,然后再次打开。

这将导致整个应用程序重新启动,并且持久性单例对象的所有内存都将丢失。

我最终使用localstorage在两次刷新或制表符更改之间保持不变。