Документ веб-сайта 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
Как настроить обработчик делегирования в бесклиентской конфигурации Flurl ⇐ C#
Место общения программистов C#
1719115601
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())
));
Подробнее здесь: [url]https://stackoverflow.com/questions/78653878/how-to-configure-delegating-handler-in-flurl-clientless-configuration[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия