为 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();
这样你就可以在你的程序中使用相同的服务提供者。
我有一个 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();
这样你就可以在你的程序中使用相同的服务提供者。