在SDK开发中处理AddHttpClient

时间:2019-03-25 08:35:13

标签: dependency-injection .net-core sdk httpclientfactory

我正在为我们的客户端开发.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中实现和处理此问题的常用方法是什么?

我有点希望能够处理这两种情况。

0 个答案:

没有答案