コード例 #1
0
            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);
            }
コード例 #2
0
            private static int GetIndex(DisposableType value)
            {
                int index = System.Convert.ToInt32(value);

                Debug.Assert((index >= 0) && (index < Disposer.DisposableTypeCount));

                return(index);
            }
コード例 #3
0
        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>
        }
コード例 #4
0
        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>
        }
コード例 #5
0
        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>
        }
コード例 #6
0
        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>
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: tamirdresher/RxInAction
 private static void TraditionalUsingStatement()
 {
     using (var disposable = new DisposableType())
     {
         //Rest of code
     }
 }
コード例 #8
0
 /// <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);