我有一个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实例并且不想处理它,我可以安全地抑制警告吗?
第二版的类实现是否有意义?