public void Add(IDisposable disposable, DisposableType disposableType) { if (m_disposed) { throw new ObjectDisposedException("Disposer"); } if (!Enum.IsDefined(typeof(DisposableType), disposableType)) { throw new ArgumentException("disposableType"); } if (disposable == null) { return; } int index = Disposer.GetIndex(disposableType); var collection = m_disposable[index]; if (collection == null) { collection = new Stack <IDisposable>(); m_disposable[index] = collection; } collection.Push(disposable); }
private static int GetIndex(DisposableType value) { int index = System.Convert.ToInt32(value); Debug.Assert((index >= 0) && (index < Disposer.DisposableTypeCount)); return(index); }
public void ShouldDispose() { // <example11> var disposableObj = new DisposableType(); using (var container = new ScopedContainer()) { container.RegisterObject(disposableObj, scopeBehaviour: ScopeBehaviour.Explicit); var result = container.Resolve <DisposableType>(); Assert.Same(disposableObj, result); } // Should be disposed Assert.True(disposableObj.Disposed); // </example11> }
public void ShouldNotDisposeByDefault() { // <example10> var disposableObj = new DisposableType(); using (var container = new ScopedContainer()) { container.RegisterObject(disposableObj); var result = container.Resolve <DisposableType>(); Assert.Same(disposableObj, result); } // Should NOT be disposed Assert.False(disposableObj.Disposed); // </example10> }
public void ShouldDecorateListWithDisposableListDecorator() { // <example10> var container = new Container(); container.RegisterDecorator(typeof(DisposableListDecorator <>), typeof(IList <>)); // Note above - we only register the decorator, the underlying List<> // is always created by Rezolver from its own default behaviour var list = container.Resolve <IList <object> >(); var toDispose = new DisposableType(); list.Add(toDispose); list.Clear(); //disposes here Assert.True(toDispose.Disposed); // </example10> }
public void OnlyRootScopeShouldDispose() { // <example12> var disposableObj = new DisposableType(); using (var container = new ScopedContainer()) { container.RegisterObject(disposableObj, scopeBehaviour: ScopeBehaviour.Explicit); using (var scope = container.CreateScope()) { var result = container.Resolve <DisposableType>(); Assert.Same(disposableObj, result); } // Should not be disposed here... Assert.False(disposableObj.Disposed); } // ... but should be disposed here Assert.True(disposableObj.Disposed); // </example12> }
private static void TraditionalUsingStatement() { using (var disposable = new DisposableType()) { //Rest of code } }
/// <summary> /// Determines whether or not the current <see cref="Type" /> implements <see cref="IDisposable" /> or is /// <see cref="IDisposable" />. /// </summary> /// <param name="target"> /// The current instance of the <see cref="Type" />. /// </param> /// <returns> /// <see langword="true" /> if the current <see cref="Type" /> implements <see cref="IDisposable" /> or is /// <see cref="IDisposable" />, otherwise <see langword="false" />. /// </returns> public static Boolean IsDisposable(this Type target) => DisposableType.IsAssignableFrom(target);