public void clearing_a_container_disposes_all_its_registered_IDisposable_objects_and_remove_reentrancy_is_handled()
        {
            SimpleServiceContainer container = new SimpleServiceContainer();
            DisposableThatReenterClearWhenDisposed disposableClass = new DisposableThatReenterClearWhenDisposed();

            disposableClass.ServiceContainer = container;
            container.Add(disposableClass, Util.ActionDispose);

            DisposableThatReenterClearWhenDisposed service = container.GetService <DisposableThatReenterClearWhenDisposed>();

            service.Should().NotBeNull();
            service.GetType().Should().Be(typeof(DisposableThatReenterClearWhenDisposed));

            container.Clear();

            container.GetService(typeof(DisposableThatReenterClearWhenDisposed)).Should().BeNull();
            container.GetService <DisposableThatReenterClearWhenDisposed>().Should().BeNull();
            container.Invoking(sut => sut.GetService <DisposableThatReenterClearWhenDisposed>(true)).Should().Throw <Exception>();
        }
        public void using_onRemove_action_reentrancy_of_remove_is_handled()
        {
            SimpleServiceContainer container = new SimpleServiceContainer();
            DisposableThatReenterClearWhenDisposed disposableClass = new DisposableThatReenterClearWhenDisposed();
            EmptyClass stupidObject = new EmptyClass();

            disposableClass.ServiceContainer = container;
            container.Add(disposableClass, Util.ActionDispose);
            container.Add(stupidObject, e => container.Clear());

            DisposableThatReenterClearWhenDisposed service = container.GetService <DisposableThatReenterClearWhenDisposed>();

            service.Should().BeOfType <DisposableThatReenterClearWhenDisposed>();

            container.Remove <EmptyClass>();

            container.GetService(typeof(DisposableThatReenterClearWhenDisposed)).Should().BeNull();
            container.GetService <DisposableThatReenterClearWhenDisposed>().Should().BeNull();
            container.Invoking(sut => sut.GetService <DisposableThatReenterClearWhenDisposed>(true)).Should().Throw <Exception>();
        }