将服务注入 blazor 始终为 null

问题描述 投票:0回答:1

在Program.cs中

builder.Services.AddScoped<HttpClient>(s => {
    var httpClient = new HttpClient
    {
        BaseAddress = new Uri("https://localhost:7273/")
    };

    return httpClient; });  builder.Services.AddScoped<IApiService, ApiService>();

在 Home.razor.cs 中

[Inject]  protected IApiService? ApiService { get; set; }    protected override async Task OnInitializedAsync()  {
     if (ApiService != null)
     {
         User = await ApiService.GetDataAsync<AuthUserModel>("/api/admin/auth");
         Debug.WriteLine("OK");
     }
     else
     {
         Debug.WriteLine("ApiService is not injected");
     }
     await base.OnInitializedAsync();  }

为什么总是收到“ApiService 未注入”? 谢谢和问候!

blazor inject
1个回答
0
投票

首先,您应该确保将这些代码放在组件基类中而不是剃刀页面中。

我还在我身边创建了一个测试演示,我在 blazor 服务器应用程序中使用静态 SSR,效果很好。

下面是我的测试演示:

Home.剃须刀:

@页面“/” @inherits HomeBase

首页

总部:

public partial class HomeBase : ComponentBase
{
    [Inject] protected IApiService ApiService { get; set; }

    protected override async Task OnInitializedAsync()
    {
        try
        {
            var result = await ApiService.GetDataAsync<AuthUserModel>("/api/admin/auth");
            Debug.WriteLine("OK");
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"Error: {ex.Message}");
        }
    }
}

结果:

© www.soinside.com 2019 - 2024. All rights reserved.