@code
ファイル内のブロック.razor
やコード ビハインドで呼び出しを行うのではなく、Blazor のサービスから Http 呼び出しを行いたいと考えています。次のエラーが表示されます。
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");
}
}
}