public void Dispose_InvokeDisposingWithDisposableObject_CallsDispose()
        {
            var componentContainer = new Container();
            var component          = new Component();

            componentContainer.Add(component);
            Assert.Same(componentContainer, component.Container);

            var container = new SubServiceContainer();

            container.AddService(typeof(object), component);

            container.Dispose(disposing: false);
            Assert.Same(componentContainer, component.Container);
            Assert.Same(component, container.GetService(typeof(object)));

            container.Dispose(disposing: true);
            Assert.Null(component.Container);
            Assert.Null(container.GetService(typeof(object)));

            // Dispose again.
            container.Dispose(disposing: true);
            Assert.Null(component.Container);
            Assert.Null(container.GetService(typeof(object)));
        }
        public void Ctor_IServiceProvider(IServiceProvider parentProvider)
        {
            var container = new SubServiceContainer(parentProvider);

            Assert.Equal(new Type[] { typeof(IServiceContainer), typeof(ServiceContainer) }, container.DefaultServices);
            Assert.Same(container.DefaultServices, container.DefaultServices);
        }
        public void Ctor_Default()
        {
            var container = new SubServiceContainer();

            Assert.Equal(new Type[] { typeof(IServiceContainer), typeof(ServiceContainer) }, container.DefaultServices);
            Assert.Same(container.DefaultServices, container.DefaultServices);
        }
        public void Dispose_InvokeDisposing_ClearsServices()
        {
            var container       = new SubServiceContainer();
            var serviceInstance = new object();

            container.AddService(typeof(object), serviceInstance);

            container.Dispose(disposing: false);
            Assert.Same(serviceInstance, container.GetService(typeof(object)));

            container.Dispose(disposing: true);
            Assert.Null(container.GetService(typeof(object)));

            // Dispose again.
            container.Dispose(disposing: true);
            Assert.Null(container.GetService(typeof(object)));
        }