public void RegisterScopedConcreteTypeCreatesScoped()
        {
            var container = new ContainerExtension();

            container.RegisterScoped <ServiceMock>();
            var resolved1 = container.Resolve <ServiceMock>();
            var resolved2 = container.Resolve <ServiceMock>();

            Assert.NotNull(resolved1);
            Assert.Same(resolved1, resolved2);

            container.CreateScope();
            var resolved3 = container.Resolve <ServiceMock>();

            Assert.NotSame(resolved1, resolved3);
        }
        public void RegisterScopedWithFactoryAndContainerProvider()
        {
            var container = new ContainerExtension();

            container.Register <IServiceMock, ServiceMock>(nameof(ServiceMock));
            container.RegisterScoped <IServiceMock>(CreateServiceWithContainerProvider);
            var resolved1 = container.Resolve <IServiceMock>();

            Assert.NotNull(resolved1);
            Assert.IsType <ServiceMock>(resolved1);

            var resolved2 = container.Resolve <IServiceMock>();

            Assert.Same(resolved1, resolved2);
            container.CreateScope();
            var resolved3 = container.Resolve <IServiceMock>();

            Assert.NotSame(resolved2, resolved3);
        }
        public void RegisterScopedWithFactory()
        {
            var container = new ContainerExtension();

            container.RegisterScoped <IServiceMock>(CreateService);
            var resolved1 = container.Resolve <IServiceMock>();

            Assert.NotNull(resolved1);
            Assert.IsType <ServiceMock>(resolved1);
            var serviceMock = resolved1 as ServiceMock;

            Assert.Equal("Created through a factory", serviceMock.SomeProperty);

            var resolved2 = container.Resolve <IServiceMock>();

            Assert.Same(resolved1, resolved2);
            container.CreateScope();
            var resolved3 = container.Resolve <IServiceMock>();

            Assert.NotSame(resolved2, resolved3);
        }