【问题标题】:Blazor WASM Service HTTP Call during Initialization初始化期间的 Blazor WASM 服务 HTTP 调用
【发布时间】:2021-02-16 18:17:01
【问题描述】:

在我的项目中,我想在项目启动时在本地获取所有配置信息。我创建了一个 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();
}

【问题讨论】:

  • 您能否提供更多代码以便更好地理解?看到注入了 HttpClient 的 ConfigurationManager 服务会很有帮助。
  • 请说明问题所在。我们需要详细说明什么不起作用以及重现它的代码。

标签: blazor blazor-webassembly


【解决方案1】:

使用builder.Servuces.AddScoped&lt;StateManager&gt;() 添加状态管理器不会提供对服务的引用,因此无法调用非静态方法,所以我尝试了这个

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();
}

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多