Я разрабатываю .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?
Я хочу быть в состоянии справиться с обоими сценариями.