HTTP-вызов службы Blazor WASM во время инициализации

#blazor #blazor-webassembly

#blazor #blazor-webassembly

Вопрос:

В моем проекте я хотел бы получить всю информацию о конфигурации локально при запуске проекта. Я создал службу ConfigurationManager с внедренным в нее HttpClient. В компонентах Blazor существуют события жизненного цикла, подобные тем, OnInitializedAsync которые вызываются при создании компонента.

 protected override async Task OnInitializedAsync()
{
    await ...
}
 

Есть ли что-то эквивалентное для служб?

Program.cs содержит следующее

 public static async Task Main(string[] args)
{
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    builder.RootComponents.Add<App>("#app");
    builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    builder.Services.AddScoped<StateManager>();
    await builder.Build().RunAsync();
}
 

Комментарии:

1. Можете ли вы предоставить больше своего кода, чтобы получить лучшее понимание? Было бы полезно увидеть службу ConfigurationManager с внедренным в нее HttpClient.

2. Пожалуйста, уточните, в чем проблема. Нам нужны подробности о том, что не работает, и код для его воспроизведения.

Ответ №1:

Добавление диспетчера состояний с builder.Servuces.AddScoped<StateManager>() помощью не дает ссылки на службу, поэтому невозможно вызвать нестатические методы, поэтому я попробовал это

 public static async Task Main(string[] args)
{
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    builder.RootComponents.Add<App>("#app");

    var http = new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) };
    builder.Services.AddScoped(sp => http);

    var state = new StateManager(http);
    builder.Services.AddScoped(sp => state);
    await state.LoadAsync();
    await builder.Build().RunAsync();
}