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); }
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); }
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); }
public void OwnsSingleton() { var f = new SingletonServiceFactory <IThing> { Creator = () => new Thing() }; var s = f.Service; f.Dispose(); Assert.That(s.Disposed, Is.True); }
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); }
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)); }
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)); }
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); }
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)); }
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>(); }
internal void AddSingletonService <T>(T singleton) { _services[typeof(T)] = new SingletonServiceFactory(singleton); }