/// <summary> /// Adds the <see cref="IHttpClientFactory"/> and related services to the <see cref="IServiceCollection"/> and configures /// a binding between the <typeparamref name="TClient" /> type and a named <see cref="HttpClient"/>. /// </summary> /// <typeparam name="TClient"> /// The type of the typed client. They type specified by TClient will be registered in the service collection as /// a transient service. See <see cref="ITypedHttpClientFactory" /> for more details about authoring typed clients. /// </typeparam> /// <param name="services">The <see cref="IServiceCollection"/>.</param> /// <param name="name">The logical name of the <see cref="HttpClient"/> to configure.</param> /// <param name="configureClient">A delegate that is used to configure an <see cref="HttpClient"/>.</param> /// <returns>An <see cref="IHttpClientBuilder"/> that can be used to configure the client.</returns> /// <remarks> /// <para> /// <see cref="HttpClient"/> instances that apply the provided configuration can be retrieved using /// <see cref="IHttpClientFactory.CreateClient(string)"/> and providing the matching name. /// </para> /// <para> /// <typeparamref name="TClient"/> instances constructed with the appropriate <see cref="HttpClient" /> /// can be retrieved from <see cref="IServiceProvider.GetService(Type)" /> (and related methods) by providing /// <typeparamref name="TClient"/> as the service type. /// </para> /// <para> /// Use <see cref="Options.Options.DefaultName"/> as the name to configure the default client. /// </para> /// </remarks> public static IHttpClientBuilder AddHttpClient <TClient>(this IServiceCollection services, string name, Action <HttpClient> configureClient) where TClient : class { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (name == null) { throw new ArgumentNullException(nameof(name)); } if (configureClient == null) { throw new ArgumentNullException(nameof(configureClient)); } AddHttpClient(services); var builder = new DefaultHttpClientBuilder(services, name); builder.AddHttpClientOptions(configureClient); builder.AddTypedClient <TClient>(); return(builder); }