public void ShouldDisposeInstanceWhenDispose()
        {
            // Given
            var expectedInstance = new Mock <IDisposable>();
            var lifetime         = new ContainerSingletonLifetime();
            var resolver         = lifetime.Compile(() => expectedInstance.Object);

            resolver(Mock.Of <IContainer>());

            // When
            lifetime.Dispose();

            // Then
            expectedInstance.Verify(i => i.Dispose(), Times.Once);
        }
        public void ShouldDisposeInstanceWhenDispose()
        {
            // Given
            var expectedInstance = new Mock <IDisposable>();
            var lifetime         = new ContainerSingletonLifetime();
            var resolver         = lifetime.Compile(() => expectedInstance.Object);
            var container        = new Mock <IContainer>();

            container.Setup(i => i.UnregisterResource(expectedInstance.Object)).Returns(true);
            resolver(container.Object);

            // When
            lifetime.Dispose();

            // Then
            expectedInstance.Verify(i => i.Dispose(), Times.Once);
        }
        public void ShouldCreateSingleInstance()
        {
            // Given
            var lifetime   = new ContainerSingletonLifetime();
            var resolver   = lifetime.Compile(() => new object());
            var container1 = Mock.Of <IContainer>();
            var container2 = Mock.Of <IContainer>();

            // When
            var instance11 = resolver(container1);
            var instance21 = resolver(container2);
            var instance12 = resolver(container1);
            var instance22 = resolver(container2);

            // Then
            instance11.ShouldBe(instance12);
            instance21.ShouldBe(instance22);
            instance11.ShouldNotBe(instance22);
        }