web-dev-qa-db-ja.com

Autofac-シングルインスタンスHttpClient

毎回新しいインスタンスではなくHttpClientを再利用する必要があることをさまざまな場所で読んでください。

https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

プロジェクトでAutofacを使用しています。

これは、サービスに注入するためにHttpClientの単一インスタンスを使用できるようにする良い方法でしょうか?

builder.Register(c => new HttpClient()).As<HttpClient>().SingleInstance();

動作するようです:)

11
wingyip

アプリケーションのライフサイクル全体で1つずつ必要な場合は問題ありませんが、APIエンドポイントごとに異なるように構成することもできます。

builder.Register(ctx => new HttpClient() {BaseAddress = new Uri("https://api.ipify.org")})
    .Named<HttpClient>("ipify")
    .SingleInstance();

builder.Register(ctx => new HttpClient() { BaseAddress = new Uri("https://api.postcodes.io") })
    .Named<HttpClient>("postcodes.io")
    .SingleInstance();

次に、PostcodeQueryHandler

public class PostcodeQueryHandler
{
    public PostcodeQueryHandler(HttpClient httpClient) { }
}

次のようなバインディングを設定します

builder.Register(ctx => new PostcodeQueryHandler(ctx.ResolveNamed<HttpClient>("postcodes.io")))
        .InstancePerDependency();
11
Kevin Smith