Я пытаюсь использовать внедрение зависимостей для DelegatingHandler
, который содержит 2 интерфейса и 1 строку.
public class MessageHandler : DelegatingHandler
{
private readonly ILogger<MessageHandler> _logger;
private readonly ISomeService _someService;
public string Name { get; set; }
public MessageHandler(ILogger<MessageHandler> logger, ISomeService someService)
{
_logger = logger;
_someService = someService;
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
Console.WriteLine($"Doing some other logic with {Name}");
var response = await base.SendAsync(request, cancellationToken);
_someService.DoSomething(Name);
return response;
}
}
Я добавляю DelegatingHandler
к HttpClient
через IHttpClientFactory
services.AddHttpClient("github")
.ConfigureHttpClient(c => { c.BaseAddress = new Uri("https://www.github.com"); })
.AddHttpMessageHandler<MessageHandler>(); // I want Name property to be 'github'
Однако я также хочу использовать MessageHandler
с несколькими HttpClient
сотличается Name
s
services.AddHttpClient("twitter")
.ConfigureHttpClient(c => { c.BaseAddress = new Uri("https://www.twitter.com"); })
.AddHttpMessageHandler<MessageHandler>(); // I want Name property to be 'twitter'
Есть ли способ достичь этого без выполнения:
services.AddHttpClient("github")
.ConfigureHttpClient(c => { c.BaseAddress = new Uri("https://www.github.com"); })
.AddHttpMessageHandler(provider =>
{
var logger = provider.GetRequiredService<ILogger<MessageHandler>>();
var someService = provider.GetRequiredService<ISomeService>();
return new MessageHandler(logger, someService, "github");
});