Поскольку appsettings.json
не очень хорошо работает с Blazor WA, я создаю свой собственный файл .json
и помещаю его в wwwroot
, на страницах, где он требуется, я использую HttpClient
, чтобы добраться дофайл следующим образом config = await Http.GetJsonAsync<Configuration>("/config/appsettings.json");
Это прекрасно работает, однако я делаю это на нескольких страницах, поэтому я хотел бы добавить Configuration
объект / сервис в startup.cs и сделать так, чтобы мои страницы использовали его вместо того, чтобы делатьэто несколько раз.
Мне трудно узнать, как правильно читать файл в Startup.cs, любая помощь будет оценена.
ОБНОВЛЕНИЕ
Похоже, что App.OnInitializedAsync
запускается до Index.OnInitializedAsync
, но Settings = await httpClient.GetJsonAsync<Settings>("/config/appsettings.json").ConfigureAwait(false);
занимает больше времени, в результате чего App.OnInitializedAsync
выполняется ДО указанной выше строки.
здесь весь код
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ConfigurationManager>();
services.AddBlazoredToast();
}
public void Configure(IComponentsApplicationBuilder app)
{
app.AddComponent<App>("app");
}
}
App.razor
protected override async Task OnInitializedAsync()
{
Console.WriteLine("App.OnInitializedAsync");
await configManager.InitializeAsync();
}
Index.razor
protected override async Task OnInitializedAsync()
{
Console.WriteLine("Index.OnInitializedAsync");
//config = await Http.GetJsonAsync<Configuration>("/config/appsettings.json");
if (configManager == null)
{
Console.WriteLine("Index.OnInitializedAsync config manager is null");
}
else
{
if (configManager.Settings == null)
{
Console.WriteLine("Index.OnInitializedAsync config.Settings is null");
}
else
{
Console.WriteLine("base url" + configManager.Settings.ApiBaseUrl);
}
}
}
Вот последовательность
WASM: App.OnInitializedAsync
WASM: ConfigurationManager.InitializeAsync
WASM: Index.OnInitializedAsync
WASM: Index.OnInitializedAsync config.Settings is null
WASM: ConfigurationManager.Setting has been set: ApiBaseUrl https://localhost:44316