我想从 Blazor 中的服务进行 Http 调用,而不是@code
在文件中的块.razor
或代码隐藏中进行调用。我收到错误:
Shared/WeatherService.cs(16,17): error CS0246: The type or namespace name 'HttpClient' could not be found (are you missing a using directive or an assembly reference?)
文档显示这就是它的完成方式。
复杂的服务可能需要额外的服务。在前面的示例中,DataAccess 可能需要 HttpClient 默认服务。@inject(或 InjectAttribute)不可用于服务。必须改用构造函数注入。通过向服务的构造函数添加参数来添加所需的服务。当 DI 创建服务时,它会在构造函数中识别它需要的服务并相应地提供它们。
如何纠正错误?
// WeatherService.cs
using System.Threading.Tasks;
namespace MyBlazorApp.Shared
{
public interface IWeatherService
{
Task<Weather> Get(decimal latitude, decimal longitude);
}
public class WeatherService : IWeatherService
{
public WeatherService(HttpClient httpClient)
{
...
}
public async Task<Weather> Get(decimal latitude, decimal longitude)
{
// Do stuff
}
}
}
// Starup.cs
using Microsoft.AspNetCore.Components.Builder;
using Microsoft.Extensions.DependencyInjection;
using MyBlazorApp.Shared;
namespace MyBlazorApp
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IWeatherService, WeatherService>();
}
public void Configure(IComponentsApplicationBuilder app)
{
app.AddComponent<App>("app");
}
}
}