我会MessageHandler
在启动时将一个注入到配置中,该配置是专门为具有内部消息处理程序的动态列表而构建的,并将它们使用的接口从自定义接口更改DelegatingHandler
为自定义接口,例如
public interface ICustomMessageHandler
{
Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
}
在此之后,您可以创建一个MessageHandler
包含内部处理程序列表的标准:
public class DynamicMessageHandler : DelegatingHandler
{
public List<ICustomMessageHandler> InnerHandlers { get; set; }
public DynamicMessageHandler()
{
InnerHandlers = new List<ICustomMessageHandler>();
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
foreach (var innerHandler in InnerHandlers)
{
await innerHandler.SendAsync(request, cancellationToken);
}
return await base.SendAsync(request, cancellationToken);
}
}
这样InnerHandlers
,只要您保留一个DynamicMessageHandler
周围的实例,您就应该能够在运行时修改列表。