HttpClientFactory предлагает следующий метод расширения:
public static IHttpClientBuilder AddHttpClient<TClient>(this IServiceCollection services, string name)
и я создал типизированный HttpClient следующим образом:
public class CustomClient {
public CustomClient(HttpClient client,
CustomAuthorizationInfoObject customAuthorizationInfoObject) {
/// use custom authorization info to customize http client
}
public async Task<CustomModel> DoSomeStuffWithClient() {
/// do the stuff
}
}
Я могу зарегистрировать этот пользовательский клиент в ServiceCollection программы следующим образом:
services.AddTransient<CustomAuthorizationInfoObject>();
services.AddHttpClient<CustomClient>("DefaultClient");
Затем я могу зарегистрировать второй экземпляр этого CustomClient с некоторой слегка измененной информацией в нем:
services.AddHttpClient<CustomClient>("AlternativeAuthInfo", (client) => {
client.DefaultRequestHeaders.Authorization = ...;
});
В другом месте программы я хочу получить имя с именем CustomClient
. Это доказывает препятствие.
Я могу получить, какой CustomClient
был добавлен к последним службам, просто запросив CustomClient
у поставщика услуг.
Вызов, например, IHttpClientFactory.CreateClient("AlternativeAuthInfo")
, возвращает HttpClient
, поэтому я не могу получить доступ к дополнительному методу в CustomClient, и там, похоже, нет других методов, которые бы мне помогли.
Как мне получить именованный клиент? Или я неправильно использую возможность именовать и ссылаться на типизированного клиента через оригинальный метод расширения?