Exemple #1
0
        public void CreateService_Type_PopulatesConstructorParams()
        {
            // Arrange

            var logger = new Mock <ILogger>().Object;

            var serviceProvider = new Mock <IServiceProvider>();

            serviceProvider
            .Setup(m => m.GetService(typeof(ILogger)))
            .Returns(logger);

            var factory = new SingletonServiceFactory(typeof(WithParametersType));

            factory.Initialize(serviceProvider.Object);

            // Act

            var result = factory.CreateService(typeof(WithParametersType));

            // Assert

            Assert.NotNull(result);
            var typedResult = Assert.IsAssignableFrom <WithParametersType>(result);

            Assert.Equal(logger, typedResult.Logger);
        }
Exemple #2
0
        public void ProvidedService()
        {
            var services = new ServiceCollection();

            services.AddTransient <IThing, Thing>();
            var serviceProvider = services.BuildServiceProvider();

            var f = new SingletonServiceFactory <IThing>
            {
                ServiceProvider = serviceProvider
            };

            Assert.That(f.OwnsService, Is.False);

            var s = f.Service;

            Assert.That(s, Is.Not.Null);
            Assert.That(s, Is.InstanceOf <Thing>());
            Assert.That(f.Service, Is.SameAs(s));

            f.Dispose();
            Assert.That(s.Disposed, Is.False);

            serviceProvider.Dispose();
            Assert.That(s.Disposed, Is.True);
        }
Exemple #3
0
        public void CreateService_LambdaCalledXTimes_ReturnsSingleton(int times)
        {
            // Arrange

            var serviceProvider = new Mock <IServiceProvider>();

            var factory = new SingletonServiceFactory(localServiceProvider =>
            {
                Assert.Equal(serviceProvider.Object, localServiceProvider);

                return(new object());
            });

            factory.Initialize(serviceProvider.Object);

            // Act

            var result = Enumerable.Range(1, times).Select(p => factory.CreateService(typeof(object))).ToList();

            // Assert

            var obj = result.First();

            Assert.All(result, p => Assert.Equal(obj, p));
        }
        public void ServiceIsProvidedAndNotDisposed()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IService, Service>();
            var serviceProvider = services.BuildServiceProvider();

            var factory = new SingletonServiceFactory <IService>
            {
                ServiceProvider = serviceProvider
            };

            Service.InstanceCount = 0;
            Service.DisposedCount = 0;

            _ = factory.Service;

            factory.Dispose();

            Assert.That(Service.InstanceCount, Is.EqualTo(1));
            Assert.That(Service.DisposedCount, Is.EqualTo(0));

            serviceProvider.Dispose();

            Assert.That(Service.DisposedCount, Is.EqualTo(1));
        }
        public void OwnsCreatedServiceByDefault()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator = () => new Service()
            };

            Assert.That(factory.OwnsService, Is.True);
        }
        public void ServiceIsSingleton()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator = () => new Service()
            };

            Assert.That(factory.Service, Is.SameAs(factory.Service));
        }
        public void CanSetAndGetCreator()
        {
            // ReSharper disable once ConvertToLocalFunction
            Func <IService> creator = () => new Service();

            var factory = new SingletonServiceFactory <IService>
            {
                Creator = creator
            };

            Assert.That(factory.Creator, Is.SameAs(creator));
        }
        public void DeepCloneReturnsDifferentCreatedService()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator = () => new Service()
            };

            var clone = factory.Clone(false);

            Assert.That(factory.Service, Is.Not.SameAs(clone.Service));
            Assert.That(clone.OwnsService, Is.True); // deep clone owns its service
        }
        public void CanSetAndGetServiceProvider()
        {
            var services        = new ServiceCollection();
            var serviceProvider = services.BuildServiceProvider();

            var factory = new SingletonServiceFactory <IService>
            {
                ServiceProvider = serviceProvider
            };

            Assert.That(factory.ServiceProvider, Is.SameAs(serviceProvider));
        }
        public void ShallowCloneReturnsSameCreatedService()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator = () => new Service()
            };

            var clone = factory.Clone();

            Assert.That(factory.Service, Is.SameAs(clone.Service));
            Assert.That(clone.OwnsService, Is.False); // but does not own it
        }
        public void DoesNotOwnsCreatedServiceByDefault()
        {
            var services        = new ServiceCollection();
            var serviceProvider = services.BuildServiceProvider();

            var factory = new SingletonServiceFactory <IService>
            {
                ServiceProvider = serviceProvider
            };

            Assert.That(factory.OwnsService, Is.False);
        }
Exemple #12
0
        public void OwnsSingleton()
        {
            var f = new SingletonServiceFactory <IThing>
            {
                Creator = () => new Thing()
            };

            var s = f.Service;

            f.Dispose();
            Assert.That(s.Disposed, Is.True);
        }
Exemple #13
0
        public void DoesNotOwnSingleton()
        {
            var f = new SingletonServiceFactory <IThing>
            {
                Creator     = () => new Thing(),
                OwnsService = false
            };

            var s = f.Service;

            f.Dispose();
            Assert.That(s.Disposed, Is.False);
        }
Exemple #14
0
        public void CreateSingleton()
        {
            var f = new SingletonServiceFactory <IThing>
            {
                Creator = () => new Thing()
            };

            var s = f.Service;

            Assert.That(s, Is.Not.Null);
            Assert.That(s, Is.InstanceOf <Thing>());
            Assert.That(f.Service, Is.SameAs(s));
        }
        public void ServiceIsNotCreated()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator = () => new Service()
            };

            Service.InstanceCount = 0;
            Service.DisposedCount = 0;

            factory.Dispose();

            Assert.That(Service.InstanceCount, Is.EqualTo(0));
            Assert.That(Service.DisposedCount, Is.EqualTo(0));
        }
Exemple #16
0
        public void ShallowCloneSingleton()
        {
            var f1 = new SingletonServiceFactory <IThing>
            {
                Creator = () => new Thing()
            };

            var f2 = f1.Clone();

            var s = f2.Service;

            Assert.That(s, Is.Not.Null);
            Assert.That(s, Is.InstanceOf <Thing>());
            Assert.That(f2.Service, Is.SameAs(s));
            Assert.That(f1.Service, Is.SameAs(s));
        }
Exemple #17
0
        public void CreateService_CalledXTimes_ReturnsSingleton(int times)
        {
            // Arrange

            var obj = new object();

            var factory = new SingletonServiceFactory(obj);

            // Act

            var result = Enumerable.Range(1, times).Select(p => factory.CreateService(typeof(object)));

            // Assert

            Assert.All(result, p => Assert.Equal(obj, p));
        }
        public void DeepCloneReturnsSameProvidedSingletonService()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IService, Service>();
            var serviceProvider = services.BuildServiceProvider();

            var factory = new SingletonServiceFactory <IService>
            {
                ServiceProvider = serviceProvider
            };

            var clone = factory.Clone(false);

            Assert.That(factory.Service, Is.SameAs(clone.Service));
            Assert.That(clone.OwnsService, Is.False); // still does not own it
        }
        public void ServiceIsCreatedAndNotDisposed()
        {
            var factory = new SingletonServiceFactory <IService>
            {
                Creator     = () => new Service(),
                OwnsService = false
            };

            Service.InstanceCount = 0;
            Service.DisposedCount = 0;

            _ = factory.Service;

            factory.Dispose();

            Assert.That(Service.InstanceCount, Is.EqualTo(1));
            Assert.That(Service.DisposedCount, Is.EqualTo(0));
        }
        public void GetService_SingletonRegistered_ReturnsService()
        {
            // Arrange

            var obj     = new object();
            var factory = new SingletonServiceFactory(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);
        }
Exemple #21
0
        public void CreateService_Type_ReturnsSingleton(int times)
        {
            // Arrange

            var serviceProvider = new Mock <IServiceProvider>();

            var factory = new SingletonServiceFactory(typeof(NoParametersType));

            factory.Initialize(serviceProvider.Object);

            // Act

            var result = Enumerable.Range(1, times).Select(p => factory.CreateService(typeof(NoParametersType))).ToList();

            // Assert

            var obj = result.First();

            Assert.All(result, p => Assert.Equal(obj, p));
        }
Exemple #22
0
        public void DeepCloneSingleton()
        {
            var f1 = new SingletonServiceFactory <IThing>
            {
                Creator = () => new Thing()
            };

            var f2 = f1.Clone(false);

            var s2 = f2.Service;

            Assert.That(s2, Is.Not.Null);
            Assert.That(s2, Is.InstanceOf <Thing>());
            Assert.That(f2.Service, Is.SameAs(s2));

            var s1 = f1.Service;

            Assert.That(s1, Is.Not.Null);
            Assert.That(s1, Is.InstanceOf <Thing>());
            Assert.That(f1.Service, Is.SameAs(s1));

            Assert.That(s1, Is.Not.SameAs(s2));
        }
        public void NoLazyServiceToDispose()
        {
            var factory = new SingletonServiceFactory <IService>();

            factory.Dispose();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="LoadBalancingOptions"/> class.
 /// </summary>
 public LoadBalancingOptions()
 {
     LoadBalancer = new SingletonServiceFactory <ILoadBalancer>();
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="AuthenticationOptions"/> class.
 /// </summary>
 public AuthenticationOptions()
 {
     CredentialsFactory = new SingletonServiceFactory <ICredentialsFactory>();
 }
Exemple #26
0
 internal void AddSingletonService <T>(T singleton)
 {
     _services[typeof(T)] = new SingletonServiceFactory(singleton);
 }