【发布时间】:2019-06-03 08:17:57
【问题描述】:
我有点困惑如何正确实现 Dispose 模式。
我有一堂课:
public class DomainActions : IDomainActions, IDisposable
{
private HttpClient _client;
public DomainActions(string baseAddress, string token)
{
_client = new HttpClient();
_client.BaseAddress = new Uri(baseAddress);
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
public async Task<List<DomainDto>> GetDomainListAsync()
{
var requestStream = await _client.GetAsync("domains");
var requestString = await requestStream.Content.ReadAsStringAsync();
return ParseDomainListResponse(requestString);
}
据我所知,我必须分配_client
public class DomainActions : IDomainActions
{
//...
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private bool _disposed = false;
public virtual void Dispose(bool disposing)
{
if (_disposed) return;
if (disposing)
{
if (_client != null)
{
_client.Dispose();
_client = null;
}
}
_disposed = true;
}
}
我的实现是正确的,够了吗?
【问题讨论】:
-
由于
_client是实现IDisposable的类型,你需要在设置为null之前调用Dispose -
@vc74,已编辑,现在是吗?
-
看起来不错。您可以在此处查看 msdn 指南docs.microsoft.com/en-us/dotnet/standard/garbage-collection/…
-
您不需要在
HttpClient上调用.Dispose,
标签: c# .net .net-core dispose idisposable