示例#1
0
            public void Should_Resolve_Different_Instances_When_Resolving_Type_Registered_As_Transient_Twice()
            {
                // Given
                var builder = new CakeContainerBuilder();

                builder.Registry.RegisterType <CakeConsole>().Transient();
                var container = builder.Build();

                // When
                var first  = container.Resolve <CakeConsole>();
                var second = container.Resolve <CakeConsole>();

                // Then
                Assert.NotSame(first, second);
            }
示例#2
0
            public void Should_Resolve_The_Same_Instance_When_Resolving_Type_Registered_As_Singleton_Twice()
            {
                // Given
                var builder = new CakeContainerBuilder();

                builder.Registry.RegisterType <CakeConsole>().Singleton();
                var container = builder.Build();

                // When
                var first  = container.Resolve <CakeConsole>();
                var second = container.Resolve <CakeConsole>();

                // Then
                Assert.Same(first, second);
            }
示例#3
0
            public void Should_Resolve_Last_Registration_Of_Type_When_Requesting_Single_Registration()
            {
                // Given
                var builder = new CakeContainerBuilder();

                builder.Registry.RegisterType <CakeConsole>().As <IConsole>().Singleton();
                builder.Registry.RegisterType <FakeConsole>().As <IConsole>().Singleton();
                var container = builder.Build();

                // When
                var result = container.Resolve <IConsole>();

                // Then
                Assert.IsType <FakeConsole>(result);
            }
示例#4
0
            public void Should_Resolve_Last_Registration_Of_Type_When_Requesting_Enumerable_Of_Registration()
            {
                // Given
                var builder = new CakeContainerBuilder();

                builder.Registry.RegisterType <CakeConsole>().As <IConsole>().Singleton();
                builder.Registry.RegisterType <FakeConsole>().As <IConsole>().Singleton();
                var container = builder.Build();

                // When
                var result = container.Resolve <IEnumerable <IConsole> >().ToList();

                // Then
                Assert.Equal(2, result.Count);
                Assert.True(result.Any(instance => instance is CakeConsole));
                Assert.True(result.Any(instance => instance is FakeConsole));
            }
示例#5
0
        public void LoadModules(IContainer container, CakeOptions options)
        {
            var root        = GetModulePath(options);
            var moduleTypes = _searcher.Search(root);

            if (moduleTypes.Count > 0)
            {
                using (var temporaryContainer = container.BeginLifetimeScope())
                {
                    // Register modules in the temporary container.
                    RegisterExternalModules(moduleTypes, temporaryContainer);

                    // Now let the modules register their types.
                    var builder = new CakeContainerBuilder();
                    foreach (var module in temporaryContainer.Resolve <IEnumerable <ICakeModule> >())
                    {
                        builder.Registry.RegisterModule(module);
                    }
                    builder.Update(container);
                }
            }
        }