using System; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace VContainer.Internal { sealed class CompositeDisposable : IDisposable { readonly Stack disposables = new Stack(); public void Dispose() { IDisposable disposable; do { lock (disposables) { disposable = disposables.Count > 0 ? disposables.Pop() : null; } disposable?.Dispose(); } while (disposable != null); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Add(IDisposable disposable) { lock (disposables) { disposables.Push(disposable); } } } }