Saya memiliki kelas yang mengimplementasikan IDisposable menurut pola ini karena itu berisi referensi ke HttpClient. Ini terlihat seperti ini:
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
}
Saya ingin tahu apakah ServiceCreatedEntity
harus mengimplementasikan IDisposable dan membuang CustomServiceClient. Saya berharap CustomServiceClient
umumnya memiliki masa pakai lebih lama daripada ServiceCreatedEntity
, dan saya khawatir klien akan membuang ServiceCreatedEntity
dan bingung mengapa CustomServiceClient
mereka juga dibuang. Tip apa pun akan sangat dihargai!
ServiceCreatedEntity
jika mereka juga sudah selesai dengan klien. Namun perbedaannya di sini adalah StreamReaders/Writers/etc. dibuat secara eksplisit dengan operator baru (RAII dan sebagainya), sehingga pembuatnya diharapkan memiliki objek tersebut, sedangkanServiceCreatedEntity
dipakai dan dikembalikan olehCustomServiceClient
, yang menunjukkan bahwa mungkin pembuatnya tidak memilikinya. - person Andrew Gaspar   schedule 01.07.2014