C# - HttpClientFactoryをDIの外で使う

タイトルが不正確な感あるが、
HttpClientには使うにあたっての注意事項があって、これを使いやすくするHttpClientFactoryがある。
ただこれは、Microsoft.Extensions.DependencyInjectionと強く紐づいており、それ以外の場所ではどうやって使うのか? というお話。

使い方

以下二つをNugetする

  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Http

コード例は下記の通り。

using System;
using System.Threading.Tasks;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

namespace HttpClientFactoryDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Microsoft DependancyInjection
            var provider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
            // Microsoft Http クライアントファクトリーを得る
            var factory = provider.GetRequiredService<IHttpClientFactory>();
            // Http クライアントを得る
            var client = factory.CreateClient();
            // Http リクエストを用意
            var request = new HttpRequestMessage(HttpMethod.Get, "https://dekirukigasuru.com/");
            // Http アクセス
            var response = await client.SendAsync(request);
            if (response.IsSuccessStatusCode)
            {
                // 成功したら内容(HTML)を表示する
                var responseString = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseString);
            }
            else
            {
                Console.WriteLine("readError");
            }
        }
    }
}

Microsoft.Extensions.DependencyInjectionの使い方そのままになりました。


See also