StackOfDisposables
This class will dispose pushed IDisposable objects in LIFO manner.
using System;
using System.Collections.Generic;
namespace Relativity.DataExchange.Logging
{
internal class StackOfDisposables : IDisposable
{
private readonly Stack<IDisposable> disposables = new Stack<IDisposable>();
~StackOfDisposables()
{
Dispose(false);
}
public void Push(IDisposable disposable)
{
disposables.Push(disposable);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (disposing) {
while (disposables.Count > 0) {
disposables.Pop()?.Dispose();
}
}
}
}
}