HttpClientFactory, как внедрить в класс, я не имею никакого контроля над ядром 2.1

Я хотел бы использовать новый HttpClientFactory и у меня проблемы с настройкой.

У меня есть следующее (просто хорошие примеры, которые я собрал, чтобы объяснить мою точку зрения)

public class MyGitHubClient
{
    public MyGitHubClient(HttpClient client)
    {
        Client = client;
    }

    public HttpClient Client { get; }
}

Тогда по моему webapi.Startup я имею

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient<MyGitHubClient>(client =>
    {
        client.BaseAddress = new Uri("https://api.github.com/");
       //etc..              
    });

    //NOW I get error "Class name is not valid at this point" for "MyGitHubClient" below

    services.AddSingleton<IThirdPartyService>(x => new ThirdPartyService(MyGitHubClient,someOtherParamHere));

    ///etc...
}

Сторонний конструктор

    public ThirdPartyService(HttpClient httpClient, string anotherParm)
    {

    }       

Как я могу использовать HttpClientFactory когда мне нужно позвонить в класс, который я не могу контролировать?

2 ответа

Решение

AddSingleton делегат, используемый в первоначальном вопросе, занимает IServiceProvider в качестве аргумента параметра. Используйте поставщика для разрешения желаемой зависимости

services.AddSingleton<IThirdPartyService>(sp => 
    new ThirdPartyService(sp.GetService<MyGitHubClient>().Client, someOtherParamHere)
);

В Startup.cs, services.AddHttpClient();

Метод расширения из https://github.com/aspnet/HttpClientFactory/blob/dev/src/Microsoft.Extensions.Http/DependencyInjection/HttpClientFactoryServiceCollectionExtensions.cs

В своем классе добавьте IHttpClientFactory аргумент вашего конструктора.

Если вы хотите использовать его в классе, который его не принимает, вам нужно создать HttpClient в лямбде в Add* и передать его, или зарегистрируйтесь HttpClient сам с этим лямбда и пусть я передам его в

services.AddScoped(s => s.GetRequiredService<IHttpClientFactory>().CreateClient())

Пример проекта GitHub: https://github.com/aspnet/HttpClientFactory/blob/dev/samples/HttpClientFactorySample/Program.cs

Другие вопросы по тегам