Обработка AddHttpClient в разработке SDK - PullRequest
0 голосов
/ 25 марта 2019

Я разрабатываю .NET Core SDK для нашего клиента.SDK использует IHttpClientFactory для создания HttpClient для использования в его различных методах.Сейчас я пишу собственное расширение ServiceCollection, в соответствии со многими другими SDK, которое будет настраивать конфигурацию моих классов.

    public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddMyApi(this IServiceCollection serviceCollection,
        Action<MyApiOptions> setupAction)
    {
        Check.NotNull(serviceCollection, (nameof(serviceCollection)));
        Check.NotNull(setupAction, (nameof(setupAction)));

        serviceCollection.Configure(setupAction);

        return AddMyApi(serviceCollection);
    }

    public static IServiceCollection AddMyApi(this IServiceCollection serviceCollection,
        IConfiguration configuration)
    {
        Check.NotNull(serviceCollection, (nameof(serviceCollection)));
        Check.NotNull(configuration, (nameof(configuration)));

        serviceCollection.Configure<MyApiOptions>(configuration);

        return AddMyApi(serviceCollection);
    }

    private static IServiceCollection AddMyApi(this IServiceCollection serviceCollection)
    {
        return serviceCollection
            .AddTransient<IMyApiClient, MyApiClient>(sp => new MyApiClient(sp.GetRequiredService<IHttpClientFactory>(), sp.GetRequiredService<ILogger<MyApiClient>>()))
            .AddTransient(sp => new MyApi(sp.GetRequiredService<IOptions<MyApiOptions>>(), sp.GetRequiredService<IMyApiClient>()));
    }
}

Однако для этого необходимо, чтобы клиент уже вызвал методы расширения AddLogging() и AddHttpClient().Каков общий способ реализации и обработки этого в вашем собственном SDK?

Я хочу быть в состоянии справиться с обоими сценариями.

...