为 Blazor WebAssembly 中的所有 Blazor 页面实例化一个对象?

Instantiate one object for all blazor pages in Blazor WebAssembly?

我有一个 blazor webassmbly 应用程序,我只想实例化一个对象,该对象可以在客户端的所有 blazor 页面之间共享。我想要做的是在应用程序启动时实例化这个对象,在 Program.cs 中,然后在所有页面中注入该对象以使用它。我所做的是创建这个 class :

  public class AccountService
  {
        HttpCaller _httpCaller;
        AuthenticationStateProvider _provider;
        public AccountViewModel _currentAccount;

        public AccountService(HttpCaller caller, AuthenticationStateProvider provider)
        {
            _httpCaller = caller;
            _provider = provider;
        }

        public async Task<OperationResult<AccountViewModel>> GetCurrentAccount()
        {
            if (await UserIsAuthenticated())
            {
                return await _httpCaller.HttpCall<bool, AccountViewModel>(API.GetCurrentAccount, true, true);                            
            }

            return NotAuthenticated<AccountViewModel>();
        }

  } 

我调用 GetCurrentAccount() 方法并将结果关联到 _currentAccount 属性 in Program.cs class :

 AccountService accountService =  serviceProvider.GetRequiredService<AccountService>();
 var result = await accountService.GetCurrentAccount();
 if (result.IsSucces)
 {
    accountService._currentAccount = result.Result;
 };

然后我在 blazor 页面中注入 AccountService 对象,我的期望是 _currentAccount 属性 应该包含 Program.cs 中关联的 AccountViewModel 对象。但是是null。在 Program.cs class:

中调用 GetCurrentMethod() 之前,AccountService 对象被创建为作用域对象
  builder.Services.AddScoped<AccountService>();

据我所知,在重新加载应用程序之前,范围对象应该存在,没有重新加载,但 _currentAccount 属性 仍然是 null

I simply instantiate the service provider in Program.cs file like this:
ServiceProvider serviceProvider = builder.Services.BuildServiceProvider();

试试这样:

var app = appBuilder.Build();

AccountService accountService =  app.Services.GetRequiredService<AccountService>();
 
... // do your thing here

await app.Run();

这样你就可以在你的程序中使用相同的服务提供者。