2

@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 はサービスを作成するときに、コンストラクターで必要なサービスを認識し、それに応じて提供します。

ソース: https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.0#use-di-in-services

エラーを修正するにはどうすればよいですか?

// 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");
        }
    }
}
4

2 に答える 2

4

using System.Net.Http;のクラスにアクセスできませんWeatherService.cs

// WeatherService.cs
using System.Threading.Tasks;
using System.Net.Http; //<-- THIS WAS MISSING

namespace MyBlazorApp.Shared {
    public interface IWeatherService {
        Task<Weather> Get(decimal latitude, decimal longitude);
    }

    public class WeatherService : IWeatherService {
        private HttpClient httpClient;

        public WeatherService(HttpClient httpClient) {
            this.httpClient = httpClient;
        }

        public async Task<Weather> Get(decimal latitude, decimal longitude) {
            // Do stuff
        }

    }
}

クラスの完全な名前を使用してSystem.Net.Http.HttpClientも機能しない場合は、アセンブリへの参照が確実に欠落しています。

于 2019-08-04T02:28:22.150 に答える