示例#1
0
        public async Task TestMultiThreadContainerControlledLifetimeInstanceAlwaysSame()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <ILogger>()
            .Use <Logger>(new ContainerControlledLifetimeManager());

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

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

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.AreSame(logger, logger1);
        }
示例#2
0
        public async Task TestMultiThreadContainerUseExistingObjectFromLifetimeManagerWithFactoryMethodAsync()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <IRepository>()
            .Use(ctx => new Repository("sql_connection_string"), new ContainerControlledLifetimeManager());

            // Act
            var instances = await Task.WhenAll(
                Task.Run(() => {
                Task.Delay(10);
                return(container.Resolve <IRepository>());
            }),
                Task.Run(() => {
                Task.Delay(10);
                return(container.Resolve <IRepository>());
            })
                );

            var first  = instances[0];
            var second = instances[1];

            // Arrange
            Assert.AreEqual(first.ConnectionString, "sql_connection_string");
            Assert.AreEqual(second.ConnectionString, "sql_connection_string");
            Assert.AreSame(first, second);
        }
示例#3
0
            protected override void InternalClonemembers(FileSystemItem src)
            {
                base.InternalClonemembers(src);
                FsContainer s = (FsContainer)src;

                _itemsById   = new Dictionary <Int64, FileSystemItem>();
                _itemsByName = new Dictionary <String, FileSystemItem>();

                foreach (KeyValuePair <Int64, FileSystemItem> kv in s._itemsById)
                {
                    FileSystemItem srcItem = kv.Value;
                    if (srcItem is FsLink)
                    {
                        FsLink lnk    = (FsLink)srcItem;
                        FsLink lnkNew = (FsLink)srcItem.Clone();
                        AddItem(lnkNew, false);
                        if (FileSystemItem.BelongsTo(src.Owner._currentMovingRoot, lnk.ItemTo, true))
                        {
                            src.Owner._linksToFlip.Add(lnkNew);
                        }
                    }
                    else
                    {
                        AddItem(srcItem.Clone(), false);
                    }
                }
            }
示例#4
0
        public PerResolveLifetimeManagerTest()
        {
            container = new FsContainer();

            container
            .For <IMapper>()
            .Use <Mapper>(new PerResolveLifetimeManager());
        }
        public PerHttpRequestLifetimeManagerTest()
        {
            container = new FsContainer();

            container
            .For <IMapper>()
            .Use <Mapper>(new PerHttpRequestLifetimeManager());
        }
 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());
 }
        public TransientLifetimeManagerTest()
        {
            container = new FsContainer();

            container.For <ILogger>()
            .Use <Logger>(new TransientLifetimeManager());
            container.For <DisposableObject>()
            .Use <DisposableObject>(new TransientLifetimeManager());
        }
示例#8
0
        public void TestNotAssignableBaseClassTypesThrowNotAssignableException()
        {
            // Act
            var container = new FsContainer();

            container.For <DbLogger>().Use <Logger>();

            // Arrange
        }
示例#9
0
        public void TestNotAssignableInterfaceTypesThrowNotAssignableException()
        {
            // Act
            var container = new FsContainer();

            container.For <ILogger>().Use <Validator>();

            // Arrange
        }
示例#10
0
        public void TestMissingImplementationBindingResolve()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var validator = container.Resolve <IValidator>();

            // Assert
        }
示例#11
0
        public void TestMissingParameterlessConstructorResolve()
        {
            // Act
            var container = new FsContainer();

            container.For <Credential>().Use <Credential>();

            // Arrange
            var instance = container.Resolve <Credential>();

            // Assert
        }
示例#12
0
        public void TestForUseByServiceResolve()
        {
            // Act
            var container = new FsContainer();
            container.For<IValidator>().Use<Validator>();

            // Arrange
            var validator = container.Resolve<IValidator>();

            // Assert
            Assert.AreNotEqual(validator, null);
        }
示例#13
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);
        }
示例#14
0
        public void TestBaseClassInheritanceAreAssignableTypes()
        {
            // Act
            var container = new FsContainer();
            container.For<Logger>().Use<DbLogger>();

            // Arrange
            var logger = container.Resolve<Logger>();

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsInstanceOfType(logger, typeof(DbLogger));
        }
示例#15
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);
        }
示例#16
0
        public void TestForUseByServiceResolve()
        {
            // Act
            var container = new FsContainer();

            container.For <IValidator>().Use <Validator>();

            // Arrange
            var validator = container.Resolve <IValidator>();

            // Assert
            Assert.AreNotEqual(validator, null);
        }
示例#17
0
        public void RegisteredServicesResolvedWithCustomBindingResolver()
        {
            // Arrange
            var container = new FsContainer
            {
                BindingResolver = new CustomBindingBindingResolver()
            };

            container.For <IValidator>().Use <Validator>();

            // Act
            container.Resolve <IValidator>();
        }
示例#18
0
        public void TestRecursiveSingleArgumentResolve()
        {
            // Act
            var container = new FsContainer();

            container.For <ICustomerService>().Use <CustomerService>();
            container.For <IValidator>().Use <Validator>();

            // Arrange
            var instance = container.Resolve <ICustomerService>();

            // Assert
            Assert.AreNotEqual(instance, null);
        }
示例#19
0
        public void TestInterfaceInheritanceAreAssignableTypes()
        {
            // Act
            var container = new FsContainer();

            container.For <ILogger>().Use <DbLogger>();

            // Arrange
            var logger = container.Resolve <ILogger>();

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsInstanceOfType(logger, typeof(DbLogger));
        }
示例#20
0
        public void TestContainerUseFactoryMethodToCreateTheObject()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <IRepository>()
            .Use(ctx => new Repository("sql_connection_string"));

            // Act
            var repository = container.Resolve <IRepository>();

            // Arrange
            Assert.AreEqual(repository.ConnectionString, "sql_connection_string");
        }
        public void TestContainerControlledLifetimeInstanceAlwaysSame()
        {
            // Act
            var container = new FsContainer();
            container.For<ILogger>().Use<Logger>(new ContainerControlledLifetimeManager());

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

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.AreSame(logger, logger1);
        }
示例#22
0
        //((FileSysEmulator.FsContainer)item.Parent).RemoveItem( item );
        private void RemoveItem(FileSystemItem item)
        {
            if (item is FsRoot)
            {
                throw new ApplicationException("Cant' remove file system root.");
            }
            if (item is FsDrive)
            {
                throw new ApplicationException("Cant' remove file system drive.");
            }

            FsContainer cont = (FsContainer)item.Parent;

            cont.RemoveItem(item);
        }
        public void TestTransientLifetimeInstanceAlwaysDifferent()
        {
            // Act
            var container = new FsContainer();
            container.For<ILogger>().Use<Logger>(new TransientLifetimeManager());

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

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.AreNotSame(logger, logger1);
        }
示例#24
0
            protected internal void CopyItem(FileSystemItem item, FsContainer parent)
            {
                if (item.Parent != this)
                {
                    throw new ApplicationException(String.Format("Illegal call to CopyItem: '{0}' is owned by another container.", item.GetFullPath()));
                }

                if (parent._itemsById.ContainsKey(item.ID) || parent._itemsByName.ContainsKey(item.SearchedName))
                {
                    throw new ApplicationException(String.Format("Can't copy '{0}' to '{1}': there is an duplicated item.", item.GetFullPath(), parent.GetFullPath()));
                }

                item = item.Clone();

                parent.AddItem(item, false);
            }
示例#25
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);
        }
示例#26
0
        public void TestContainerControlledLifetimeInstanceAlwaysSame()
        {
            var container = new FsContainer();

            container.For <ILogger>()
            .Use <Logger>(new ContainerControlledLifetimeManager());

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

            // Assert
            Assert.IsNotNull(logger);
            Assert.IsNotNull(logger1);
            Assert.AreSame(logger, logger1);
        }
示例#27
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);
        }
示例#28
0
        public void TestRecursiveMultipleArgumentsResolve()
        {
            // Act
            var container = new FsContainer();

            container.For <ICustomerService>().Use <CustomerService>();
            container.For <IContractService>().Use <ContractService>();
            container.For <IDocumentService>().Use <DocumentService>();
            container.For <IValidator>().Use <Validator>();
            container.For <IContractRepository>().Use <ContractRepository>();

            // Arrange
            var instance = container.Resolve <ContractController>();

            // Assert
            Assert.AreNotEqual(instance, null);
        }
示例#29
0
        public void TestContainerUseExistingObjectFromLifetimeManagerWithFactoryMethod()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <IRepository>()
            .Use(ctx => new Repository("sql_connection_string"), new ContainerControlledLifetimeManager());

            // Act
            var first  = container.Resolve <IRepository>();
            var second = container.Resolve <IRepository>();

            // Arrange
            Assert.AreEqual(first.ConnectionString, "sql_connection_string");
            Assert.AreEqual(second.ConnectionString, "sql_connection_string");
            Assert.AreSame(first, second);
        }
示例#30
0
        public void TestContainerUseTransientLifetimeManagerAsDefaultWithFactoryMethod()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <IRepository>()
            .Use(ctx => new Repository("sql_connection_string"));

            // Act
            var first  = container.Resolve <IRepository>();
            var second = container.Resolve <IRepository>();

            // Arrange
            Assert.AreEqual(first.ConnectionString, "sql_connection_string");
            Assert.AreEqual(second.ConnectionString, "sql_connection_string");
            Assert.AreNotSame(first, second);
        }
示例#31
0
        public void TestNonExistingParametersDoesNotAffectToInstanceCreatingResolve()
        {
            // Act
            const string message = "Hello, world.";

            var container = new FsContainer();

            container.For <IRule>().Use <Rule>()
            .WithConstructorArgument("message", message)
            .WithConstructorArgument("messageException", message);

            // Arrange
            var instance = container.Resolve <IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreSame(instance.GetMessage(), message);
        }
示例#32
0
        public void TestWithSingleConstructorArgumentResolve()
        {
            // Act
            const string argument = "Hello, world.";

            var container = new FsContainer();

            container.For <IRule>().Use <Rule>()
            .WithConstructorArgument("message", argument);

            // Arrange
            var instance = container.Resolve <IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreEqual(instance.GetMessage(), argument);
            Assert.AreEqual(instance.GetNumber(), 0);
        }
示例#33
0
            protected internal void MoveItem(FileSystemItem item, FsContainer parent)
            {
                if (item.Parent != this)
                {
                    throw new ApplicationException(String.Format("Illegal call to MoveItem: '{0}' is owned by another container.", item.GetFullPath()));
                }

                if (parent._itemsById.ContainsKey(item.ID) || parent._itemsByName.ContainsKey(item.SearchedName))
                {
                    throw new ApplicationException(String.Format("Can't move '{0}' to '{1}': there is an duplicated item.", item.GetFullPath(), parent.GetFullPath()));
                }

                _itemsById.Remove(item.ID);
                _itemsByName.Remove(item.SearchedName);
                Owner.UnregisterItem(item);
                item.Parent = null;

                parent.AddItem(item, false);
            }
示例#34
0
        public void TestMultipleResolvedInstanceDisposeOnlyOnce()
        {
            // Arrange
            var container = new FsContainer();

            container
            .For <DisposableObject>()
            .Use <DisposableObject>(new ContainerControlledLifetimeManager());

            // Act
            var o1 = container.Resolve <DisposableObject>();
            var o2 = container.Resolve <DisposableObject>();

            // Assert
            container.Dispose();
            Assert.IsTrue(o1.WasDisposed);
            Assert.IsTrue(o2.WasDisposed);
            Assert.AreEqual(o1.DisposeCount, 1);
            Assert.AreEqual(o2.DisposeCount, 1);
        }
示例#35
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);
        }
示例#36
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);
        }
示例#37
0
        public void TestNextWithArgumentOverridePreviousResolve()
        {
            // Act
            const string msgFirst = "Hello, world.";
            const string msgLast  = "Good night, world.";
            const int    numFirst = 42;
            const int    numLast  = 7;

            var container = new FsContainer();

            container.For <IRule>().Use <Rule>()
            .WithConstructorArgument("message", msgFirst)
            .WithConstructorArgument("message", msgLast)
            .WithConstructorArgument("number", numFirst)
            .WithConstructorArgument("number", numLast);

            // Arrange
            var instance = container.Resolve <IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreEqual(instance.GetMessage(), msgLast);
            Assert.AreEqual(instance.GetNumber(), numLast);
        }
示例#38
0
        public void TestMissingParameterlessConstructorResolve()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var instance = container.Resolve<Rule>();

            // Assert
        }
示例#39
0
        public void TestNonExistingParametersDoesNotAffectToInstanceCreatingResolve()
        {
            // Act
            const string message = "Hello, world.";

            var container = new FsContainer();
            container.For<IRule>().Use<Rule>()
                .WithConstructorArgument("message", message)
                .WithConstructorArgument("messageException", message);

            // Arrange
            var instance = container.Resolve<IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreSame(instance.GetMessage(), message);
        }
示例#40
0
        public void TestNotAssignableBaseClassTypesThrowNotAssignableException()
        {
            // Act
            var container = new FsContainer();
            container.For<DbLogger>().Use<Logger>();

            // Arrange
        }
示例#41
0
        public void TestNotAssignableInterfaceTypesThrowNotAssignableException()
        {
            // Act
            var container = new FsContainer();
            container.For<ILogger>().Use<Validator>();

            // Arrange
        }
示例#42
0
        public void TestRecursiveMultipleArgumentsResolve()
        {
            // Act
            var container = new FsContainer();
            container.For<ICustomerService>().Use<CustomerService>();
            container.For<IContractService>().Use<ContractService>();
            container.For<IDocumentService>().Use<DocumentService>();
            container.For<IValidator>().Use<Validator>();
            container.For<IContractRepository>().Use<ContractRepository>();

            // Arrange
            var instance = container.Resolve<ContractController>();

            // Assert
            Assert.AreNotEqual(instance, null);
        }
示例#43
0
        public void TestRecursiveSingleArgumentResolve()
        {
            // Act
            var container = new FsContainer();
            container.For<ICustomerService>().Use<CustomerService>();
            container.For<IValidator>().Use<Validator>();

            // Arrange
            var instance = container.Resolve<ICustomerService>();

            // Assert
            Assert.AreNotEqual(instance, null);
        }
示例#44
0
        public void TestWithSingleConstructorArgumentResolve()
        {
            // Act
            const string argument = "Hello, world.";

            var container = new FsContainer();
            container.For<IRule>().Use<Rule>()
                .WithConstructorArgument("message", argument);

            // Arrange
            var instance = container.Resolve<IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreEqual(instance.GetMessage(), argument);
            Assert.AreEqual(instance.GetNumber(), 0);
        }
示例#45
0
        public void TestMissingImplementationBindingResolve()
        {
            // Act
            var container = new FsContainer();

            // Arrange
            var validator = container.Resolve<IValidator>();

            // Assert
        }
示例#46
0
        public void TestNextWithArgumentOverridePreviousResolve()
        {
            // Act
            const string msgFirst = "Hello, world.";
            const string msgLast = "Good night, world.";
            const int numFirst = 42;
            const int numLast = 7;

            var container = new FsContainer();
            container.For<IRule>().Use<Rule>()
                .WithConstructorArgument("message", msgFirst)
                .WithConstructorArgument("message", msgLast)
                .WithConstructorArgument("number", numFirst)
                .WithConstructorArgument("number", numLast);

            // Arrange
            var instance = container.Resolve<IRule>();

            // Assert
            Assert.IsNotNull(instance, null);
            Assert.AreEqual(instance.GetMessage(), msgLast);
            Assert.AreEqual(instance.GetNumber(), numLast);
        }