public void CreateService_MultipleCalls_InvokesLambdaEachTime(int times)
        {
            // Arrange

            var serviceProvider = new Mock <IServiceProvider>();

            var count   = 0;
            var factory = new TransientServiceFactory(provider =>
            {
                Assert.Equal(serviceProvider.Object, provider);
                count++;

                return(null);
            });

            factory.Initialize(serviceProvider.Object);

            // Act

            foreach (var _ in Enumerable.Range(1, times))
            {
                factory.CreateService(typeof(object));
            }

            // Assert

            Assert.Equal(times, count);
        }
        public void CreateService_NotInitialized_InvalidOperationException()
        {
            // Arrange

            var factory = new TransientServiceFactory(_ => null);

            // Act

            Assert.Throws <InvalidOperationException>(() => factory.CreateService(typeof(object)));
        }
        public void GetService_LambdaRegistered_ReturnsService()
        {
            // Arrange

            var obj     = new object();
            var factory = new TransientServiceFactory(_ => obj);

            var provider = new CouchbaseServiceProvider(new[]
            {
                new KeyValuePair <Type, IServiceFactory>(typeof(object), factory)
            });

            // Act

            var result = provider.GetService(typeof(object));

            // Assert

            Assert.Equal(obj, result);
        }
        public void GetService_LambdaRegistered_LambdaGetsServiceProvider()
        {
            // Arrange

            IServiceProvider?calledWith = null;
            var factory = new TransientServiceFactory(serviceProvider => {
                calledWith = serviceProvider;
                return(null);
            });

            var provider = new CouchbaseServiceProvider(new[]
            {
                new KeyValuePair <Type, IServiceFactory>(typeof(object), factory)
            });

            // Act

            provider.GetService(typeof(object));

            // Assert

            Assert.Equal(provider, calledWith);
        }