これは本質的に起こっていることです:
HttpMessageInvoker&HttpClient
class HttpMessageInvoker
{
private HttpMessageHandler handler;
public HttpMessageInvoker(HttpMessageHandler handler)
{
this.handler = handler;
}
public virtual void SendAsync()
{
Console.WriteLine("HttpMessageInvoker.SendAsync");
this.handler.SendAsync();
}
}
class HttpClient : HttpMessageInvoker
{
public HttpClient(HttpMessageHandler handler)
: base(handler)
{
}
public override void SendAsync()
{
Console.WriteLine("HttpClient.SendAsync");
base.SendAsync();
}
}
HttpMessageHandler&HttpClientHandler
abstract class HttpMessageHandler
{
protected internal abstract void SendAync();
}
class HttpClientHandler : HttpMessageHandler
{
protected internal override void SendAync()
{
Console.WriteLine("HttpClientHandler.SendAsync");
}
}
したがってSendAsync
、HttpClient
インスタンスを呼び出すと、そのメソッドが実行されます。SendAsync
メソッドはからメソッドを呼び出しますHttpMessageInvoker
。このメソッドはSendAsync
、HttpMessageHandler
インスタンスのメソッドを呼び出します。HttpMessageHandler
抽象的です。抽象メソッドをオーバーライドすることによりHttpClientHandler
、具体的な実装を提供します。SendAync
例:
var handler = new HttpClientHandler();
var client = new HttpClient(handler);
client.SendAsync();
出力:
HttpClient.SendAsync
HttpMessageInvoker.SendAsync
HttpClientHandler.SendAsync