我的HttpClient单例实现是否合适?

dot*_*ter 9 c# singleton .net-4.5 dotnet-httpclient

我在我的MVC4项目中使用System.Net.HttpClient(.Net 4.5).我知道HttpClient的单个实例可以用于Web应用程序中的所有Http请求.这是我对HttpClient单例的实现,它应该每次都返回单个实例.

 public sealed class HttpClientInstance: HttpClient
{
    // singleton instance
    private static readonly HttpClientInstance instance = new HttpClientInstance();

    static HttpClientInstance() { }

    private HttpClientInstance() : base() {
        Timeout = TimeSpan.FromMilliseconds(15000)));
    }
    /// <summary>
    /// Returns the singleton instance of HttpClient
    /// </summary>
    public static HttpClient Instance
    {
        get
        {
            return instance;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你觉得这有什么问题吗?

我知道我可能会使用Ninject在单例范围内注入依赖项,但这不是重点.

Dar*_*ler 3

有一些属性在发出第一个请求后就无法更改。我认为超时可能是其中之一,所以要注意这一点。

您还需要注意,单个请求不要与 DefaultRequestHeaders 混淆,因为这可能会混淆其他请求。

尝试共享 HttpClient 实例始终是一个好主意。创建单例是一种极端的情况,但只要小心,它应该可以很好地为您工作。

  • DefaultRequestHeaders 点注明。为什么单例是一种极端情况?如果不使用单例,那么我只需在 MVC 应用程序中为每个请求创建一个新的 HttpClient。 (3认同)
  • @dotnetster 一个应用程序可能会访问多个 API,因此有时拥有两个或三个 HttpClient 实例可能会很有用。 (3认同)