DI of DelegateHandler не работает должным образом - PullRequest
0 голосов
/ 18 апреля 2019

только начал работать с HttpFactory и очень запутался, как работает его DI, например, работает эта строка

services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler(s => new UserAgentDelegatingHandler());

это не

services.AddHttpClient<IMyClient, MyClient>()
  .AddHttpMessageHandler<UserAgentDelegatingHandler>();

Возвращение

"Сообщение: System.InvalidOperationException: Служба для типа 'UserAgentDelegatingHandler' не зарегистрирована."

Та же ситуация, следующий код работает нормально

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler(s => new CookieDelegateHandler(s.GetRequiredService<IHttpContextAccessor>()));

но это не

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler<CookieDelegateHandler>();

Я прочитал много примеров использования HttpClientFactory, мои DelegateHandlers из этих примеров.

Что я делаю не так?

1 Ответ

2 голосов
/ 18 апреля 2019

return "Сообщение: System.InvalidOperationException: Нет службы для тип 'UserAgentDelegatingHandler' зарегистрирован. "

Как указывает эта ошибка, вам необходимо зарегистрировать UserAgentDelegatingHandler при использовании .AddHttpMessageHandler<UserAgentDelegatingHandler>().

Проверьте AddHttpMessageHandler , и вы найдете

Тип DelegatingHandler. Тип обработчика должен быть зарегистрирован в качестве временной услуги.

Попробуйте изменить свой код как

services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
        .AddHttpMessageHandler<UserAgentDelegatingHandler>();
...