Как настроить обработчик делегирования в бесклиентской конфигурации FlurlC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить обработчик делегирования в бесклиентской конфигурации Flurl

Сообщение Anonymous »

Документ веб-сайта Flurl показывает, что у него есть конфигурация, позволяющая передавать обработчики делегирования.
https://flurl.dev/docs/configuration/
Это будет в конце приведенной выше ссылки.
Весь код настраивается в классе Program. Это приложение-функция Azure, работающее на изолированной рабочей модели.
Хотя бесклиентский шаблон в формате статических клиентов работает, шаблон DI — нет.
FlurlHttp.Clients.WithDefaults(builder => builder
.AddMiddleware(new MyDelegatingHandler()));

Конфигурация выше работает.
А вот шаблон ниже — нет.
// DI pattern:
services.AddSingleton(sp => new FlurlClientCache()
.WithDefaults(builder => builder
.AddMiddleware(sp.GetService())

Мне нужен формат DI, потому что в мой CustomDelegationHandler внедрены другие классы, и было бы проще, если бы версия DI работала.
Поскольку У меня нет интерфейса, я использовал формат ниже. Не был уверен насчет интерфейсов для DelegatingHandlers.
Пример используемого DelegationHandler:
public class MyDelegationHandler : DelegatingHandler
{
private static string CorrelationId => "correlation-id";

private readonly ICorrelationIdQuery _correlationIdQuery;

public MyDelegationHandler(ICorrelationIdQuery correlationIdQuery)
{
_correlationIdQuery = correlationIdQuery ;
}

protected async override Task SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
string correlationId = await _correlationIdQuery.Execute();

if (!request.Headers.Contains(CorrelationId))
{
request.Headers.Add(CorrelationId, correlationId);
}

return await base.SendAsync(request, cancellationToken);
}
}

Итак, мой код выглядит так:
ServiceProvider serviceProvider = services.BuildServiceProvider();
FlurlHttp.Clients.WithDefaults(builder => builder
.AddMiddleware(() => new MyDelegationHandler(serviceProvider.GetService())));

Вышеописанное работает, но не уверен, что вызов такого поставщика услуг является хорошей идеей в классе Program. Это раздел hostbuilder.ConfigureServices, и вызывать BuildServiceProvider посередине нехорошо.
Что я могу делать неправильно в приведенной ниже версии кода DI.
services.AddTransient();
services.AddSingleton(sp => new FlurlClientCache()
.WithDefaults(builder => builder
.AddMiddleware(() => sp.GetService())
));


Подробнее здесь: https://stackoverflow.com/questions/786 ... figuration
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как настроить обработчик делегирования в бесклиентской конфигурации Flurl
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как настроить обработчик делегирования в бесклиентской конфигурации Flurl
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Установка прокси-сервера для каждого запроса (или ротации прокси) с помощью .NET Flurl/HttpClient
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Flurl.http.newtonsoft подписанная версия
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как распечатать контент запроса пост -вызова Flurl?
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»