我有一個 blazor webassmbly 應用程式,我只想實體化一個物件,該物件可以在客戶端的所有 blazor 頁面之間共享。我想要做的是在應用程式啟動時實體化這個物件Program.cs,然后在所有頁面中注入該物件以使用它。我所做的是創建這個類:
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屬性相關聯Program.cs:
AccountService accountService = serviceProvider.GetRequiredService<AccountService>();
var result = await accountService.GetCurrentAccount();
if (result.IsSucces)
{
accountService._currentAccount = result.Result;
};
然后我注入AccountService的blazor頁面物件,我的期望是,_currentAccount屬性應包含AccountViewModel在相關聯的物件Program.cs。但是是null。在類中AccountService呼叫之前,該物件被創建為作用域物件:GetCurrentMethod()Program.cs
builder.Services.AddScoped<AccountService>();
據我所知,在重新加載應用程式之前,范圍物件應該存在,沒有重新加載,但_currentAccount屬性仍然是null.
uj5u.com熱心網友回復:
我只是在 Program.cs 檔案中實體化服務提供者,如下所示:
ServiceProvider serviceProvider = builder.Services.BuildServiceProvider();
像這樣嘗試:
var app = appBuilder.Build();
AccountService accountService = app.Services.GetRequiredService<AccountService>();
... // do your thing here
await app.Run();
這樣你就可以在你的程式中使用相同的服務提供者。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/328460.html
標籤:asp.net核心 依赖注入 blazor-webassembly
