我正在为我们的客户端开发.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中实现和处理此问题的常用方法是什么?
我有点希望能够处理这两种情况。