Получение службы HttpClient не работает с Blazor Client - PullRequest
0 голосов
/ 21 января 2019

Я не могу получить значение по умолчанию HttpClient, введенное сервером в Blazor клиенте.

Настроить

public void ConfigureServices(IServiceCollection services)
            {
                try
                {

                    ServiceProvider prov = services.BuildServiceProvider();
                    var returned = prov.GetRequiredService<HttpClient>();
                    if (returned == null) //returns null on Blazor Client 
                    {
                        Console.WriteLine("is null");
                    }
                    else Console.WriteLine(not null httpclient);

                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);

                }
            }

PS
Почему этот код не работает на клиенте Blazor и будет работать без проблем в любом типичном приложении Asp Net Core?

PS 2 После решения проблемы для моего данного сервиса, сначала добавив его в коллекцию сервисов, а затем используя GetService< >, я вижу, что это не работает для HttpClient.Таким образом, сервер уже внедряет в Client.Startup a HttpClient;почему я не могу получить его?

1 Ответ

0 голосов
/ 21 января 2019
public void ConfigureServices(IServiceCollection services)
{
              services.AddSingleton<MService>(); 


}

Примечание. Не следует создавать ServiceProvider.Он уже создан кодом.Все, что вам нужно сделать, это добавить свой объект в контейнер.Между прочим, если вы создаете ServiceProvider, метод ConfigureServices, в котором он был создан, должен вернуть его, чтобы другие куски кода могли его использовать.

Неясно, почему вы хотите получить доступ к службе HttpClient вМетод ConfigureServices!Однако вы можете сделать следующее: 1.Ввести IServiceProvider и использовать его следующим образом:

@inject IServiceProvider services

@functions {
    WeatherForecast[] forecasts;

    protected override async Task OnInitAsync()
    {
        var client = services.GetRequiredService<HttpClient>();
        forecasts = await client.GetJsonAsync<WeatherForecast[]>("/sample-data/weather.json");
    }
}

Создание поставщика услуг из служб, доступных в методе ConfigureServices:

public void ConfigureServices (IServiceCollection services) {

IServiceProvider Services = services.BuildServiceProvider();
var client = Services.GetRequiredService<HttpClient>();

}

Надеюсь, это поможет ...

...