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

C# 我的HttpClient单例实现是否合适?,c#,singleton,.net-4.5,dotnet-httpclient,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 instanc

我在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;
        }
    }
}
公共密封类HttpClientInstance:HttpClient
{
//单例实例
私有静态只读HttpClientInstance实例=新HttpClientInstance();
静态HttpClientInstance(){}
私有HttpClientInstance():base(){
超时=时间跨度(从毫秒(15000));
}
/// 
///返回HttpClient的单例实例
/// 
公共静态HttpClient实例
{
得到
{
返回实例;
}
}
}
你觉得这有什么问题吗


我知道我可以使用Ninject在singleton范围内注入依赖项,但这不是重点。

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

您还需要注意的是,单个请求不会弄乱DefaultRequestHeader,因为这可能会混淆其他请求


尝试和共享HttpClient实例总是一个好主意。创建单例是一种极端的情况,但要小心,它对您来说应该工作得很好。

工作代码可能应该根据此实例移动到。成员不能保证线程安全。您确定不会遇到并发问题吗?@WiktorZychla-HttpClient充当所有HTTP请求的会话。此外,HTTP操作的所有方法都是线程安全的,正如您在提供的同一链接中所提到的。为什么单身是一个极端的例子?如果不使用单例,那么我只是在我的MVC应用程序中为每个请求创建一个新的HttpClient。@Dotnetter一个应用程序可以访问多个API,因此有时有两个或三个HttpClient实例可能会很有用。我同意你的看法。我的意图是在每个用例中使用一个单例实例。所以,如果我使用三个不同的API,那么我将有三个单例实例。@dotnetster啊,那么一切都很好@dotnetster I无法使用单音设置超时