public HierarchicalLifetimeManagerTest()
 {
     parent = new FsContainer();
     child1 = parent.CreateChildContainer();
     child2 = parent.CreateChildContainer();
     parent.For<ILogger>().Use<Logger>(new HierarchicalLifetimeManager());
     parent.For<DisposableObject>()
         .Use<DisposableObject>(new HierarchicalLifetimeManager());
 }
Example #2
0
        public void TestContainerChildrenAreNotTheSame()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var child = container.CreateChildContainer();
            var child1 = container.CreateChildContainer();

            // Assert
            Assert.IsNotNull(child);
            Assert.IsNotNull(child1);
            Assert.IsInstanceOfType(child, typeof(FsContainer));
            Assert.IsInstanceOfType(child1, typeof(FsContainer));
            Assert.AreNotSame(child, child1);
        }
Example #3
0
        public void TestContainerChildrenAreNotTheSame()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var child  = container.CreateChildContainer();
            var child1 = container.CreateChildContainer();

            // Assert
            Assert.IsNotNull(child);
            Assert.IsNotNull(child1);
            Assert.IsInstanceOfType(child, typeof(FsContainer));
            Assert.IsInstanceOfType(child1, typeof(FsContainer));
            Assert.AreNotSame(child, child1);
        }
Example #4
0
        public void TestContainerCouldCreateChild()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var child = container.CreateChildContainer();

            // Assert
            Assert.IsNotNull(child);
            Assert.IsInstanceOfType(child, typeof(FsContainer));
            Assert.AreSame(child.Parent, container);
        }
Example #5
0
        public async Task TestMultiThreadParentAndChildResolvesSameContainerControlledInstances()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <ILogger>()
            .Use <Logger>(new ContainerControlledLifetimeManager());
            var child1 = container.CreateChildContainer();
            var child2 = container.CreateChildContainer();

            // Arrange
            var instances = await Task.WhenAll(
                Task.Run(() => {
                Task.Delay(10);
                return(container.Resolve <ILogger>());
            }),
                Task.Run(() => {
                Task.Delay(10);
                return(child1.Resolve <ILogger>());
            }),
                Task.Run(() => {
                Task.Delay(10);
                return(child2.Resolve <ILogger>());
            })
                );

            var logger  = instances[0];
            var logger1 = instances[1];
            var logger2 = instances[2];

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.IsNotNull(logger2);
            Assert.AreSame(logger, logger1);
            Assert.AreSame(logger, logger2);
            Assert.AreSame(logger1, logger2);
        }
Example #6
0
        public void TestContainerCouldCreateChild()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var child = container.CreateChildContainer();

            // Assert
            Assert.IsNotNull(child);
            Assert.IsInstanceOfType(child, typeof(FsContainer));
            Assert.AreSame(child.Parent, container);
        }
Example #7
0
        public void TestParentAndChildResolvesSameContainerControlledInstances()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <ILogger>()
            .Use <Logger>(new ContainerControlledLifetimeManager());
            var child1 = container.CreateChildContainer();
            var child2 = container.CreateChildContainer();

            // Arrange
            var logger  = container.Resolve <ILogger>();
            var logger1 = child1.Resolve <ILogger>();
            var logger2 = child2.Resolve <ILogger>();

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.IsNotNull(logger2);
            Assert.AreSame(logger, logger1);
            Assert.AreSame(logger, logger2);
            Assert.AreSame(logger1, logger2);
        }