public void A_registration_should_be_allowed_to_be_updated() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); configureComponents.RegisterSingleton(typeof(ISingletonComponent), new SingletonComponent()); configureComponents.RegisterSingleton(typeof(ISingletonComponent), new AnotherSingletonComponent()); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); Assert.IsInstanceOf <AnotherSingletonComponent>(builder.GetService(typeof(ISingletonComponent))); }
public void Register_singleton_should_be_supported() { var singleton = new SingletonComponent(); var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); configureComponents.RegisterSingleton(typeof(ISingletonComponent), singleton); configureComponents.RegisterSingleton(typeof(SingletonComponent), singleton); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); Assert.AreEqual(builder.GetService(typeof(SingletonComponent)), singleton); Assert.AreEqual(builder.GetService(typeof(ISingletonComponent)), singleton); }
public void Registering_the_same_singleton_for_different_interfaces_should_be_supported() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); var singleton = new SingletonThatImplementsToInterfaces(); configureComponents.RegisterSingleton(typeof(ISingleton1), singleton); configureComponents.RegisterSingleton(typeof(ISingleton2), singleton); configureComponents.ConfigureComponent(typeof(ComponentThatDependsOnMultiSingletons), DependencyLifecycle.InstancePerCall); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); var dependency = (ComponentThatDependsOnMultiSingletons)builder.GetService(typeof(ComponentThatDependsOnMultiSingletons)); Assert.NotNull(dependency.Singleton1); Assert.NotNull(dependency.Singleton2); Assert.AreEqual(builder.GetService(typeof(ISingleton1)), singleton); Assert.AreEqual(builder.GetService(typeof(ISingleton2)), singleton); }
public void Given_lookupType_should_be_used_as_service_in_the_registration_when_RegisterSingleton() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); var expected = new InheritedFromSomeClass(); configureComponents.RegisterSingleton(typeof(SomeClass), expected); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); Assert.AreEqual(expected, builder.GetService(typeof(SomeClass))); using (var scope = builder.CreateScope()) { Assert.AreEqual(expected, scope.ServiceProvider.GetService(typeof(SomeClass))); } }
public void Should_not_dispose_singletons_when_container_goes_out_of_scope() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); var singletonInMainContainer = new SingletonComponent(); configureComponents.RegisterSingleton(typeof(ISingletonComponent), singletonInMainContainer); configureComponents.ConfigureComponent(typeof(ComponentThatDependsOfSingleton), DependencyLifecycle.InstancePerUnitOfWork); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); using (var scope = builder.CreateScope()) { scope.ServiceProvider.GetService(typeof(ComponentThatDependsOfSingleton)); } Assert.False(SingletonComponent.DisposeCalled); }
public void Should_dispose_all_IDisposable_components() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); DisposableComponent.DisposeCalled = false; AnotherSingletonComponent.DisposeCalled = false; configureComponents.ConfigureComponent(typeof(DisposableComponent), DependencyLifecycle.SingleInstance); configureComponents.RegisterSingleton(typeof(AnotherSingletonComponent), new AnotherSingletonComponent()); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); builder.GetService(typeof(DisposableComponent)); builder.GetService(typeof(AnotherSingletonComponent)); (builder as IDisposable)?.Dispose(); Assert.True(DisposableComponent.DisposeCalled, "Dispose should be called on DisposableComponent"); Assert.True(AnotherSingletonComponent.DisposeCalled, "Dispose should be called on AnotherSingletonComponent"); }
public void Should_dispose_all_non_percall_IDisposable_components_in_child_container() { var serviceCollection = new ServiceCollection(); var configureComponents = new CommonObjectBuilder(serviceCollection); DisposableComponent.DisposeCalled = false; AnotherDisposableComponent.DisposeCalled = false; configureComponents.RegisterSingleton(typeof(AnotherDisposableComponent), new AnotherDisposableComponent()); configureComponents.ConfigureComponent(typeof(DisposableComponent), DependencyLifecycle.InstancePerUnitOfWork); var builder = TestContainerBuilder.CreateServiceProvider(serviceCollection); using (var scope = builder.CreateScope()) { scope.ServiceProvider.GetService(typeof(DisposableComponent)); } Assert.False(AnotherDisposableComponent.DisposeCalled, "Dispose should not be called on AnotherSingletonComponent because it belongs to main container"); Assert.True(DisposableComponent.DisposeCalled, "Dispose should be called on DisposableComponent"); }