У меня есть класс, который реализует IDisposable в соответствии с этим шаблоном, потому что он содержит ссылку на HttpClient. Выглядит это примерно так:
public class CustomServiceClient : IDisposable
{
HttpClient client;
// ...
public ServiceCreatedEntity GetEntity()
{
// ...
}
~CustomServiceClient()
{
this.Dispose(false);
}
private bool disposed = false;
void IDisposable.Dispose()
{
if(!disposed)
{
this.Dispose(true);
GC.SuppressFinalize(this);
disposed = true;
}
}
public void Dispose(bool disposing)
{
if(disposing)
{
// dispose managed resources
client.Dispose();
}
// dispose unmanaged resources - this class has none
}
}
public class ServiceCreatedEntity
{
CustomServiceClient client;
public ServiceCreatedEntity(CustomServiceClient client)
{
this.client = client;
}
// some functions that use client
}
Мне интересно, следует ли ServiceCreatedEntity
реализовать IDisposable и избавиться от CustomServiceClient. Я ожидаю, что CustomServiceClient
обычно будет иметь более длительный срок службы, чем ServiceCreatedEntity
, и я беспокоюсь, что клиент избавится от ServiceCreatedEntity
и не поймет, почему их CustomServiceClient
также были утилизированы. Будем признательны за любые советы!
ServiceCreatedEntity
, только если они тоже закончили с клиентом. Но разница здесь в том, что StreamReaders / Writers / etc. создаются явно с помощью оператора new (RAII и все такое), поэтому ожидается, что создатель будет владеть объектом, тогда какServiceCreatedEntity
создается и возвращаетсяCustomServiceClient
, что указывает на то, что, возможно, создатель не владеет им. - person Andrew Gaspar   schedule 01.07.2014