CA1001拥有一次性字段的类型应该是HttpClient上的一次性

时间:2016-06-21 21:37:07

标签: c# .net visual-studio code-analysis

我有一个HttpClientWrapper类,可以对我的类进行单元测试,这些类正在制作HttpCalls。

此类通过IoC注入,并充当单例。因为我想一遍又一遍地使用相同的HttpClient实例而不进行处理。

Do HttpClient and HttpClientHandler have to be disposed?

public class HttpClientWrapper : IHttpClientWrapper
    {
        readonly HttpClient _client;

        public HttpClientWrapper()
        {
            _client = new HttpClient();
        }
        public Uri BaseAddress
        {
            get { return _client.BaseAddress; }
        }
        public Task<HttpResponseMessage> SendAsync(HttpRequestMessage message)
        {
            Task<HttpResponseMessage> sendAsync = _client.SendAsync(message);
            return sendAsync;
        }


    }

以下自然清除警告。

  public class HttpClientWrapper : IHttpClientWrapper, IDisposable
{
    readonly HttpClient _client;

    public HttpClientWrapper()
    {
        _client = new HttpClient();
    }
    public Uri BaseAddress
    {
        get { return _client.BaseAddress; }
    }
    public Task<HttpResponseMessage> SendAsync(HttpRequestMessage message)
    {
        Task<HttpResponseMessage> sendAsync = _client.SendAsync(message);
        return sendAsync;
    }


    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {

            if (_client != null)
            {
                _client.Dispose();
            }
        }

    }

当我运行代码分析时,我收到来自IDE的以下警告。

  

CA1001拥有一次性领域的类型应为一次性工具   'HttpClientWrapper'上的IDisposable,因为它创建了.httpClientWrapper'的成员   以下IDisposable类型:'HttpClient'。如果'HttpClientWrapper'有   以前发布,添加实现IDisposable的新成员   这种类型被认为是对现有消费者的重大改变。

我在这里错过了一些东西吗?既然我只想保留一个HttpClient实例并且不想处理它,我可以安全地抑制警告吗?

第二版的类实现是否有意义?

0 个答案:

没有答案