Пример #1
0
        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)));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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)));
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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");
        }
Пример #7
0
        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");
        }