public void StandardResolveTests_DependencyResolve_ResolutionFailed()
 {
     using (IStashboxContainer container = new StashboxContainer())
     {
         container.RegisterType<ITest2, Test2>();
         var test2 = container.Resolve<ITest2>();
     }
 }
Example #2
0
        public void ContainerTests_ResolverTest()
        {
            var container = new StashboxContainer();
            container.RegisterResolver<TestResolver>((context, typeInfo) => typeInfo.Type == typeof(ITest1),
                (context, typeInfo) => new TestResolver(context, typeInfo));
            var inst = container.Resolve<ITest1>();

            Assert.IsInstanceOfType(inst, typeof(Test1));
        }
Example #3
0
        private static IStashboxContainer ConfigureContainer()
        {
            var container = new StashboxContainer();

            RegisterServices(container);

            DependencyResolver.SetResolver(new StashboxDependencyResolver(container));

            return container;
        }
Example #4
0
        public void FuncTests_Resolve()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest, Test>();
            var inst = container.Resolve<Func<ITest>>();

            Assert.IsNotNull(inst);
            Assert.IsInstanceOfType(inst, typeof(Func<ITest>));
            Assert.IsInstanceOfType(inst(), typeof(Test));
        }
        public void InstanceBuilderTests_Resolve()
        {
            using (var container = new StashboxContainer())
            {
                var dep = new Test();
                container.RegisterInstance<ITest>(dep);
                var inst = container.Resolve<ITest>();

                Assert.AreSame(inst, dep);
            }
        }
Example #6
0
        public void LazyTests_Resolve()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest, Test>();
            var inst = container.Resolve<Lazy<ITest>>();

            Assert.IsNotNull(inst);
            Assert.IsFalse(inst.IsValueCreated);
            Assert.IsInstanceOfType(inst, typeof(Lazy<ITest>));
            Assert.IsInstanceOfType(inst.Value, typeof(Test));
        }
Example #7
0
        public void ContainerTests_IsRegistered()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.RegisterType<ITest2, Test2>();

            Assert.IsTrue(container.IsRegistered<ITest1>());
            Assert.IsTrue(container.IsRegistered(typeof(ITest2)));
            Assert.IsFalse(container.IsRegistered<ITest3>());
            Assert.IsFalse(container.IsRegistered<ITest1>("test"));
            Assert.IsFalse(container.IsRegistered(typeof(ITest1), "test"));
        }
        public void FactoryBuildUpTests_Resolve()
        {
            using (var container = new StashboxContainer())
            {
                container.PrepareType<ITest, Test>().WithFactory(() => new Test("test")).Register();
                container.RegisterType<ITest1, Test1>();

                var inst = container.Resolve<ITest1>();

                Assert.IsInstanceOfType(inst.Test, typeof(Test));
                Assert.AreEqual("test", inst.Test.Name);
            }
        }
        public void FactoryBuildUpTests_DependencyResolve_ServiceUpdated()
        {
            using (var container = new StashboxContainer())
            {
                container.PrepareType<ITest, Test>().WithFactory(() => new Test("test")).Register();
                container.RegisterType<ITest2, Test2>();
                container.PrepareType<ITest, Test>().WithFactory(() => new Test("test1")).ReMap();
                var inst = container.Resolve<ITest2>();

                Assert.IsInstanceOfType(inst.Test, typeof(Test));
                Assert.AreEqual("test1", inst.Test.Name);
            }
        }
Example #10
0
        public void ConditionalTests_AttributeCondition_Second()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.PrepareType<ITest1, Test11>().WhenHas<TestCondition2Attribute>().Register();
            container.PrepareType<ITest1, Test12>().WhenHas<TestConditionAttribute>().Register();
            container.RegisterType<ITest2, Test3>();

            var test3 = container.Resolve<ITest2>();

            Assert.IsInstanceOfType(test3.test1, typeof(Test12));
            Assert.IsInstanceOfType(test3.test12, typeof(Test11));
        }
        public void DecoratorExtensionsTests_WithoutExtension()
        {
            using (var cont = new StashboxContainer())
            {
                cont.PrepareType<ITest1, Test1>().DecorateWith<TestDecorator1>().Register();
                cont.RegisterDecorator<ITest1, TestDecorator2>();
                var test = cont.Resolve<ITest1>();

                Assert.IsNotNull(test);
                Assert.IsInstanceOfType(test, typeof(Test1));

                Assert.IsNull(test.Test);
            }
        }
        public void BuildExtensionManagerTests_AddRegistrationBuildExtension()
        {
            var post = new Mock<IRegistrationExtension>();
            using (var container = new StashboxContainer())
            {
                container.RegisterExtension(post.Object);
                container.RegisterInstance(new object());
                post.Verify(p => p.Initialize(container.ContainerContext));
                post.Verify(p => p.OnRegistration(container.ContainerContext,
                    It.IsAny<RegistrationInfo>(), null));
            }

            post.Verify(p => p.CleanUp());
        }
Example #13
0
        public void InjectionMemberTests_BuildUp_WithoutService()
        {
            using (var container = new StashboxContainer())
            {
                container.RegisterType<ITest, Test>();
                var test1 = new Test1();
                container.BuildUp(test1);
                var inst = container.Resolve<Test1>();

                Assert.IsNotNull(inst);
                Assert.IsNotNull(inst.Test);
                Assert.IsInstanceOfType(inst, typeof(Test1));
                Assert.IsInstanceOfType(inst.Test, typeof(Test));
            }
        }
Example #14
0
        public void ContainerTests_ChildContainer()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.RegisterType<ITest2, Test2>();

            var child = container.CreateChildContainer();
            child.RegisterType<ITest3, Test3>();

            var test3 = child.Resolve<ITest3>();

            Assert.IsNotNull(test3);
            Assert.IsInstanceOfType(test3, typeof(Test3));
            Assert.AreEqual(container, child.ParentContainer);
        }
Example #15
0
        public void ReMapTests_Lazy()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest1, Test1>();

            var lazy = container.Resolve <Lazy <ITest1> >();

            Assert.IsInstanceOfType(lazy.Value, typeof(Test1));

            container.ReMap <ITest1, Test11>();

            var lazy2 = container.Resolve <Lazy <ITest1> >();

            Assert.IsInstanceOfType(lazy2.Value, typeof(Test11));
        }
Example #16
0
        public void InjectionMemberTests_Resolve()
        {
            using var container = new StashboxContainer();
            container.Register <ITest, Test>();
            container.Register <ITest1, Test1>();

            var inst = container.Resolve <ITest1>();

            Assert.NotNull(inst);
            Assert.NotNull(inst.Test);
            Assert.IsType <Test1>(inst);
            Assert.IsType <Test>(inst.Test);

            Assert.NotNull(((Test1)inst).TestFieldProperty);
            Assert.IsType <Test>(((Test1)inst).TestFieldProperty);
        }
Example #17
0
        public void ReMapTests_Enumerable()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest1, Test1>();

            var coll = container.Resolve <IEnumerable <ITest1> >().ToArray();

            Assert.IsInstanceOfType(coll[0], typeof(Test1));

            container.ReMap <ITest1, Test11>();

            var coll2 = container.Resolve <IEnumerable <ITest1> >().ToArray();

            Assert.IsInstanceOfType(coll2[0], typeof(Test11));
        }
Example #18
0
        public void ReMapTests_Func()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest1, Test1>();

            var func = container.Resolve <Func <ITest1> >();

            Assert.IsInstanceOfType(func(), typeof(Test1));

            container.ReMap <ITest1, Test11>();

            var func2 = container.Resolve <Func <ITest1> >();

            Assert.IsInstanceOfType(func2(), typeof(Test11));
        }
        public void Generate_one_instance_for_multiple_interfaces()
        {
            var container = new StashboxContainer();

            container.Register <Test2>(context => context.AsImplementedTypes());
            var inst1 = container.Resolve <ITest>();
            var inst2 = container.Resolve <ITest1>();
            var inst3 = container.Resolve <ITest2>();
            var inst4 = container.Resolve <Test>();
            var inst5 = container.Resolve <Test2>();

            Assert.NotSame(inst1, inst2);
            Assert.NotSame(inst2, inst3);
            Assert.NotSame(inst3, inst4);
            Assert.NotSame(inst4, inst5);
        }
Example #20
0
        public async Task FuncTests_Register_FuncDelegate_Async_Longrun()
        {
            var container = new StashboxContainer();
            var test      = new Test();

            container.RegisterInstance(test);
            container.RegisterFunc(async resolver =>
            {
                await Task.Delay(1000);
                return(resolver.Resolve <Test>());
            });

            var inst = await container.Resolve <Func <Task <Test> > >()();

            Assert.Same(test, inst);
        }
        public void InjectionMemberTests_Resolve()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest, Test>();
            container.RegisterType<ITest1, Test1>();

            var inst = container.Resolve<ITest1>();

            Assert.IsNotNull(inst);
            Assert.IsNotNull(inst.Test);
            Assert.IsInstanceOfType(inst, typeof(Test1));
            Assert.IsInstanceOfType(inst.Test, typeof(Test));

            Assert.IsNotNull(((Test1)inst).TestFieldProperty);
            Assert.IsInstanceOfType(((Test1)inst).TestFieldProperty, typeof(Test));
        }
Example #22
0
        public void EnumerableTests_Resolve_PreserveOrder_Parent_Func()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest1, Test1>();
            container.RegisterType <ITest1, Test11>();
            container.RegisterType <ITest1, Test12>();

            var child = container.CreateChildContainer();

            var services = child.Resolve <IEnumerable <Func <ITest1> > >().ToArray();

            Assert.IsInstanceOfType(services[0](), typeof(Test1));
            Assert.IsInstanceOfType(services[1](), typeof(Test11));
            Assert.IsInstanceOfType(services[2](), typeof(Test12));
        }
Example #23
0
        public void OverrideTests_Resolve_Factory_NonGeneric_DerivedParam()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest2, Test2>();

            var inst1 = new Test1 {
                Name = "test"
            };

            var factory = container.ResolveFactory(typeof(ITest2), parameterTypes: inst1.GetType());
            var inst2   = (ITest2)factory.DynamicInvoke(inst1);

            Assert.IsNotNull(inst2);
            Assert.AreEqual("test", inst2.Name);
        }
Example #24
0
        public void NamedScope_Preserve_Instance_Through_Nested_Scopes()
        {
            var container = new StashboxContainer()
                            .Register <ITest, Test>(config => config.InNamedScope("A"));

            using (var s1 = container.BeginScope("A"))
            {
                var i1 = s1.Resolve <ITest>();
                using (var s2 = s1.BeginScope("C"))
                {
                    var i2 = s2.Resolve <ITest>();

                    Assert.AreSame(i2, i1);
                }
            }
        }
Example #25
0
        public void Composition_Test_Enumerable_MultipleDecorators()
        {
            using var container = new StashboxContainer()
                                  .Register <IA, A>()
                                  .Register <IA, AA>()
                                  .RegisterDecorator <IA, AD>()
                                  .RegisterDecorator <IA, D2>();

            var d = container.Resolve <IA>();

            Assert.IsType <D2>(d);
            Assert.IsType <AD>(((D2)d).A.ElementAt(0));
            Assert.IsType <A>(((AD)((D2)d).A.ElementAt(0)).A);
            Assert.IsType <AD>(((D2)d).A.ElementAt(1));
            Assert.IsType <AA>(((AD)((D2)d).A.ElementAt(1)).A);
        }
Example #26
0
        public void WireUpTests_WithoutService_NonGeneric()
        {
            using var container = new StashboxContainer();
            container.RegisterSingleton <ITest, Test>();
            object test1 = new Test1();

            container.WireUp(test1, typeof(Test1));
            var inst = container.Resolve <Test1>();

            Assert.NotNull(inst);
            Assert.NotNull(inst.Test);
            Assert.NotNull(inst.test);
            Assert.IsType <Test1>(inst);
            Assert.IsType <Test>(inst.Test);
            Assert.IsType <Test>(inst.test);
        }
Example #27
0
        public async Task Disposes_Either_Normal_And_Async()
        {
            AsyncDisposable asyncDisposable;
            Disposable      disposable;

            {
                await using var container = new StashboxContainer(c => c.WithDisposableTransientTracking())
                                            .Register <AsyncDisposable>()
                                            .Register <Disposable>();
                asyncDisposable = container.Resolve <AsyncDisposable>();
                disposable      = container.Resolve <Disposable>();
            }

            Assert.True(asyncDisposable.Disposed);
            Assert.True(disposable.Disposed);
        }
Example #28
0
        public void MultitenantTests_Configure_Dep()
        {
            var container = new StashboxContainer();

            container.Register <D>();
            container.Register <IA, A>();

            var md = new TenantDistributor(container);

            md.ConfigureTenant("A", c => c.Register <IA, B>());

            var tenant = md.GetTenant("A");

            Assert.IsType <A>(container.Resolve <D>().Ia);
            Assert.IsType <B>(md.GetTenant("A").Resolve <D>().Ia);
        }
Example #29
0
        public void FuncTests_Resolve_ParameterInjection_3Params()
        {
            var container = new StashboxContainer();

            container.RegisterType <IFTest3, FTest3>();
            var inst = container.Resolve <Func <ITest, IFTest1, IFTest2, IFTest3> >();

            var t  = new Test();
            var t1 = new FTest1();
            var t2 = new FTest2(null);
            var r  = inst(t, t1, t2);

            Assert.AreSame(t, r.Test);
            Assert.AreSame(t1, r.Test1);
            Assert.AreSame(t2, r.Test2);
        }
Example #30
0
        public void DecoratorTests_AutoMemberInjection_InjectionParameter_Fluent(CompilerType compilerType)
        {
            using var container = new StashboxContainer(c => c.WithCompiler(compilerType));
            container.Register <ITest1, Test1>();
            container.RegisterDecorator <ITest1, TestDecorator4>(context => context
                                                                 .WithAutoMemberInjection(Rules.AutoMemberInjectionRules.PropertiesWithLimitedAccess)
                                                                 .WithInjectionParameter("Name", "test"));
            var test = container.Resolve <ITest1>();

            Assert.NotNull(test);
            Assert.IsType <TestDecorator4>(test);

            Assert.NotNull(test.Test);
            Assert.IsType <Test1>(test.Test);
            Assert.Equal("test", ((TestDecorator4)test).Name);
        }
Example #31
0
        public void EnumerableTests_Resolve_PreserveOrder_Scoped_Lazy()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterType <ITest1, Test1>();
            container.RegisterType <ITest1, Test11>();
            container.RegisterType <ITest1, Test12>();

            var child = container.BeginScope();

            var services = child.Resolve <IEnumerable <Lazy <ITest1> > >().ToArray();

            Assert.IsInstanceOfType(services[0].Value, typeof(Test1));
            Assert.IsInstanceOfType(services[1].Value, typeof(Test11));
            Assert.IsInstanceOfType(services[2].Value, typeof(Test12));
        }
Example #32
0
        public void Ensure_Expression_Override_Does_Not_Mess_Up_Cache()
        {
            var proxyBuilder = new DefaultProxyBuilder();

            using var container = new StashboxContainer().Register <IInterceptor, NoInterceptor>()
                                  .RegisterDecorator <ILevel2Service>(proxyBuilder.CreateInterfaceProxyTypeWithTargetInterface(typeof(ILevel2Service), new Type[0], ProxyGenerationOptions.Default))
                                  .RegisterDecorator <ILevel2bService>(proxyBuilder.CreateInterfaceProxyTypeWithTargetInterface(typeof(ILevel2bService), new Type[0], ProxyGenerationOptions.Default))
                                  .RegisterDecorator <ILevel3Service>(proxyBuilder.CreateInterfaceProxyTypeWithTargetInterface(typeof(ILevel3Service), new Type[0], ProxyGenerationOptions.Default))
                                  .RegisterScoped <ILevel1Service, Level1Service>()
                                  .RegisterScoped <ILevel2Service, Level2Service>()
                                  .RegisterScoped <ILevel2bService, Level2bService>()
                                  .RegisterScoped <ILevel3Service, Level3Service>()
                                  .RegisterScoped <ILevel4Service, Level4Service>();

            Assert.NotNull(container.Resolve <ILevel2Service>());
        }
Example #33
0
        public void NamedScope_Simple_Resolve_Gets_Named_When_Scoped_Doesnt_Exist(CompilerType compilerType)
        {
            using var scope = new StashboxContainer(config => config.WithCompiler(compilerType))
                              .Register <ITest, Test11>()
                              .Register <ITest, Test>(config => config.WithName("T"))
                              .Register <ITest, Test1>()
                              .BeginScope("A");

            var a = scope.Resolve <ITest>("T");
            var b = scope.Resolve <ITest>("T");
            var c = scope.Resolve <ITest>();

            Assert.IsType <Test1>(c);
            Assert.IsType <Test>(b);
            Assert.IsType <Test>(a);
        }
        public void FinalizerTests_Register_Scoped_Multiple_Shouldnt_Throw()
        {
            using var container = new StashboxContainer();
            container.Register <ITest, Test>(context => context.WithFinalizer(t => t.Method()).WithScopedLifetime());
            for (var i = 0; i < 10; i++)
            {
                ITest test;
                using (var scope = container.BeginScope())
                {
                    test = scope.Resolve <ITest>();
                    Assert.False(test.MethodCalled);
                }

                Assert.True(test.MethodCalled);
            }
        }
Example #35
0
        public void DependencyBindingTests_Bind_To_Different_Types()
        {
            var inst = new StashboxContainer()
                       .Register <ITest1, Test1>("test1")
                       .Register <ITest1, Test11>("test2")
                       .Register <ITest1, Test12>("test3")
                       .Register <Test>(ctx => ctx
                                        .WithDependencyBinding("test1", "test1")
                                        .WithDependencyBinding("test2", "test2")
                                        .WithDependencyBinding("test3", "test3"))
                       .Resolve <Test>();

            Assert.IsType <Test1>(inst.Test1);
            Assert.IsType <Test11>(inst.Test2);
            Assert.IsType <Test12>(inst.Test3);
        }
Example #36
0
        public void GenericTests_Nested_Generics_Decorator()
        {
            var inst = new StashboxContainer()
                       .Register(typeof(IGen3 <>), typeof(Gen3 <>))
                       .RegisterDecorator(typeof(IGen3 <>), typeof(Gen3Decorator <>))
                       .Register <ConstraintArgument>()
                       .Resolve <IGen3 <ConstraintArgument> >();

            Assert.NotNull(inst.Value);
            Assert.IsType <ConstraintArgument>(inst.Value);

            var decorator = (Gen3Decorator <ConstraintArgument>)inst;

            Assert.NotNull(decorator.Decorated);
            Assert.IsType <Gen3 <ConstraintArgument> >(decorator.Decorated);
        }
Example #37
0
        public void RegistersTests_RegisterAssembly_Configurator_AsSelf()
        {
            IStashboxContainer container = new StashboxContainer();

            container.RegisterAssemblyContaining <ITest1>(configurator: context =>
            {
                if (context.ServiceType == typeof(Test1))
                {
                    context.WithScopedLifetime();
                }
            });

            var regs = container.ContainerContext.RegistrationRepository.GetRegistrationMappings().Where(r => r.Value.RegistrationContext.Lifetime is ScopedLifetime).ToArray();

            Assert.IsTrue(regs.Length > 0);
        }
Example #38
0
        public void NamedScope_Simple_Resolve_Gets_Named_When_Scoped_Doesnt_Exist()
        {
            var scope = new StashboxContainer()
                        .Register <ITest, Test11>()
                        .Register <ITest, Test>(config => config.WithName("T"))
                        .Register <ITest, Test1>()
                        .BeginScope("A");

            var a = scope.Resolve <ITest>("T");
            var b = scope.Resolve <ITest>("T");
            var c = scope.Resolve <ITest>();

            Assert.IsInstanceOfType(c, typeof(Test1));
            Assert.IsInstanceOfType(b, typeof(Test));
            Assert.IsInstanceOfType(a, typeof(Test));
        }
Example #39
0
        public void NamedScope_Simple_Resolve_Gets_Named_Within_Scope()
        {
            var scope = new StashboxContainer()
                        .Register <ITest, Test11>(config => config.InNamedScope("A"))
                        .Register <ITest, Test>(config => config.InNamedScope("A").WithName("T"))
                        .Register <ITest, Test1>(config => config.InNamedScope("A"))
                        .BeginScope("A");

            var a = scope.Resolve <ITest>("T");
            var b = scope.Resolve <ITest>("T");
            var c = scope.Resolve <ITest>();

            Assert.AreSame(a, b);
            Assert.AreNotSame(a, c);
            Assert.IsInstanceOfType(a, typeof(Test));
        }
Example #40
0
        public void ContextEstablishedInChildContainersCanBeAccessedWhenUsingAParentScopeConstruction()
        {
            StashboxContainer sb1 = CreateContainer(c => c.WithSingletonLifetime());
            StashboxContainer sb2 = CreateContainer(c => c.WithSingletonLifetime());

            // This works
            sb1.PutInstanceInScope(typeof(PrivateArgs <ITier2>), PrivateArgs <ITier2> .Get("Bob"));
            sb1.PutInstanceInScope(typeof(PrivateArgs <TierBase>), PrivateArgs <TierBase> .Get(5));
            ITier1 renderer = (ITier1)sb1.Resolve(typeof(ITier1));


            using var scope = sb2.BeginScope();
            scope.PutInstanceInScope(typeof(PrivateArgs <ITier2>), PrivateArgs <ITier2> .Get("Bob"));
            scope.PutInstanceInScope(typeof(PrivateArgs <TierBase>), PrivateArgs <TierBase> .Get(5));
            ITier1 renderer2 = (ITier1)scope.Resolve(typeof(ITier1));
        }
Example #41
0
        public void NamedScope_Cache(CompilerType compilerType)
        {
            var container = new StashboxContainer(c => c.WithCompiler(compilerType))
                            .Register <ITest, Test>(config => config.InNamedScope("A"))
                            .Register <ITest, Test1>();

            using var scope = container.BeginScope();
            var inst = scope.Resolve <ITest>();

            Assert.IsType <Test1>(inst);

            using var scope1 = container.BeginScope("A");
            inst             = scope1.Resolve <ITest>();

            Assert.IsType <Test>(inst);
        }
Example #42
0
        public void RegistersTests_AsImplementedTypes_BaseType()
        {
            var container = new StashboxContainer();

            container.Register <Test14>(context => context.AsImplementedTypes());

            var regs = container.ContainerContext.RegistrationRepository.GetRegistrationMappings().OrderBy(r => r.Key.Name).ToArray();

            Assert.AreEqual(6, regs.Length);
            Assert.AreSame(regs[0].Key, typeof(ITest));
            Assert.AreSame(regs[1].Key, typeof(ITest1));
            Assert.AreSame(regs[2].Key, typeof(ITest2));
            Assert.AreSame(regs[3].Key, typeof(Test12));
            Assert.AreSame(regs[4].Key, typeof(Test13));
            Assert.AreSame(regs[5].Key, typeof(Test14));
        }
        public void ContainerTests_CheckRegistration()
        {
            using (var container = new StashboxContainer())
            {
                container.Register <ITest1, Test1>();

                var reg = container.ContainerContext.RegistrationRepository
                          .GetRegistrationMappings().FirstOrDefault(r => r.Key == typeof(ITest1));

                Assert.IsNotNull(reg);

                reg = container.ContainerContext.RegistrationRepository.GetRegistrationMappings().FirstOrDefault(r => r.Value.ImplementationType == typeof(Test1));

                Assert.IsNotNull(reg);
            }
        }
Example #44
0
        static void Main(string[] args)
        {
            using (var container = new StashboxContainer())
            {
                //container.PrepareType<IFirstService, FirstService>().WithLifetime(new SingletonLifetime()).Register();
                //container.PrepareType<ISecondService, SecondService>().WithLifetime(new SingletonLifetime()).Register();
                //container.PrepareType<IThirdService, ThirdService>().WithLifetime(new SingletonLifetime()).Register();
                //container.RegisterType<ISubObjectOne, SubObjectOne>();
                //container.RegisterType<ISubObjectTwo, SubObjectTwo>();
                //container.RegisterType<ISubObjectThree, SubObjectThree>();
                //container.RegisterType<IComplex1, Complex1>();
                //container.RegisterType<IComplex2, Complex2>();
                //container.RegisterType<IComplex3, Complex3>();

               container.RegisterType<ISimpleAdapter, SimpleAdapterOne>("one");
               container.RegisterType<ISimpleAdapter, SimpleAdapterTwo>("two");
               container.RegisterType<ISimpleAdapter, SimpleAdapterThree>("three");
               container.RegisterType<ISimpleAdapter, SimpleAdapterFour>("four");
               container.RegisterType<ISimpleAdapter, SimpleAdapterFive>("five");

               container.RegisterType<ImportMultiple1>();
               container.RegisterType<ImportMultiple2>();
               container.RegisterType<ImportMultiple3>();

                for (int i = 0; i < 1000000000; i++)
                {
                    var importMultiple1 = (ImportMultiple1)container.Resolve(typeof(ImportMultiple1));
                    var importMultiple2 = (ImportMultiple2)container.Resolve(typeof(ImportMultiple2));
                    var importMultiple3 = (ImportMultiple3)container.Resolve(typeof(ImportMultiple3));
                    //var complex1 = (IComplex1)container.Resolve(typeof(IComplex1));
                    //var complex2 = (IComplex2)container.Resolve(typeof(IComplex2));
                    //var complex3 = (IComplex3)container.Resolve(typeof(IComplex3));
                    //container.PrepareType<IFirstService, FirstService>().WithLifetime(new SingletonLifetime()).Register();
                    //container.PrepareType<ISecondService, SecondService>().WithLifetime(new SingletonLifetime()).Register();
                    //container.PrepareType<IThirdService, ThirdService>().WithLifetime(new SingletonLifetime()).Register();
                    //container.RegisterType<ISubObjectOne, SubObjectOne>();
                    //container.RegisterType<ISubObjectTwo, SubObjectTwo>();
                    //container.RegisterType<ISubObjectThree, SubObjectThree>();
                    //container.RegisterType<IComplex1, Complex1>();
                    //container.RegisterType<IComplex2, Complex2>();
                    //container.RegisterType<IComplex3, Complex3>();
                }
            }
            Console.Write("Done");
            Console.ReadKey();
        }
        public void Ensure_Good_Constructor_Selected()
        {
            var container = new StashboxContainer();

            container.RegisterAssemblyContaining <ClassA>();

            var funcA     = container.Resolve <Func <ClassA, InjectedClass> >();
            var classA    = container.Resolve <ClassA>();
            var injectedA = funcA(classA);

            var funcB     = container.Resolve <Func <ClassB, InjectedClass> >();
            var classB    = container.Resolve <ClassB>();
            var injectedB = funcB(classB);

            Assert.Equal(classA, injectedA.ClassA);
            Assert.Equal(classB, injectedB.ClassB);
        }
        public void Ensure_Good_Constructor_Selected_Deeper_In_The_Tree()
        {
            var container = new StashboxContainer();

            container.Register <A>().Register <B>().Register <Subject1>().Register <Subject2>();

            var fa    = container.Resolve <Func <A, Subject2> >();
            var a     = container.Resolve <A>();
            var instA = fa(a);

            var fb    = container.Resolve <Func <B, Subject2> >();
            var b     = container.Resolve <B>();
            var instB = fb(b);

            Assert.Equal(a, instA.Subject1.A);
            Assert.Equal(b, instB.Subject1.B);
        }
Example #47
0
        public void ReMapTests_SingleResolve()
        {
            IStashboxContainer container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();

            var test1 = container.Resolve<ITest1>();

            Assert.IsNotNull(test1);
            Assert.IsInstanceOfType(test1, typeof(Test1));

            container.ReMap<ITest1, Test11>();

            var test11 = container.Resolve<ITest1>();

            Assert.IsNotNull(test11);
            Assert.IsInstanceOfType(test11, typeof(Test11));
        }
Example #48
0
        public void EnumerableTests_Resolve()
        {
            IStashboxContainer container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.RegisterType<ITest1, Test11>();
            container.RegisterType<ITest1, Test12>();
            container.RegisterType<ITest2, Test2>("enumerable");
            container.RegisterType<ITest2, Test22>("array");

            var enumerable = container.Resolve<ITest2>("enumerable");
            var array = container.Resolve<ITest2>("array");

            var all = container.Resolve<IEnumerable<ITest2>>();
            var all2 = container.ResolveAll<ITest2>();

            Assert.AreEqual(2, all.Count());
            Assert.AreEqual(2, all2.Count());
        }
Example #49
0
        public void LifetimeTests_Resolve()
        {
            using (IStashboxContainer container = new StashboxContainer())
            {
                container.PrepareType<ITest1, Test1>().WithLifetime(new SingletonLifetime()).Register();
                container.RegisterType<ITest2, Test2>();
                container.RegisterType<ITest3, Test3>();

                var test1 = container.Resolve<ITest1>();
                test1.Name = "test1";
                var test2 = container.Resolve<ITest2>();
                var test3 = container.Resolve<ITest3>();

                Assert.IsNotNull(test1);
                Assert.IsNotNull(test2);
                Assert.IsNotNull(test3);
            }
        }
Example #50
0
        public void ReMapTests_DependencyResolve_Fluent()
        {
            IStashboxContainer container = new StashboxContainer();
            container.RegisterType<ITest1>(typeof(Test1));
            container.RegisterType<ITest2, Test2>();

            var test2 = container.Resolve<ITest2>();

            Assert.IsNotNull(test2.Test1);
            Assert.IsInstanceOfType(test2.Test1, typeof(Test1));

            container.PrepareType<ITest1>(typeof(Test11)).ReMap();

            var test22 = container.Resolve<ITest2>();

            Assert.IsNotNull(test22.Test1);
            Assert.IsInstanceOfType(test22.Test1, typeof(Test11));
        }
        public void BuildExtensionManagerTests_AddPostBuildExtension()
        {
            var post = new Mock<IPostBuildExtension>();
            using (var container = new StashboxContainer())
            {
                container.RegisterExtension(post.Object);
                var obj = new object();
                container.PrepareType<object>().WithFactory(() => obj).Register();

                post.Setup(p => p.PostBuild(obj, obj.GetType(), container.ContainerContext, It.IsAny<ResolutionInfo>(),
                    It.IsAny<TypeInformation>(), null)).Returns(obj).Verifiable();

                var inst = container.Resolve(typeof(object));
                post.Verify(p => p.Initialize(container.ContainerContext));
            }

            post.Verify(p => p.CleanUp());
        }
Example #52
0
        public void OverrideTests_Resolve()
        {
            IStashboxContainer container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.PrepareType<ITest2, Test2>().WithInjectionParameters(new InjectionParameter { Value = new Test1 { Name = "fakeName" }, Name = "test1" }).Register();
            var inst2 = container.Resolve<ITest2>();

            Assert.IsInstanceOfType(inst2, typeof(Test2));
            Assert.AreEqual("fakeName", inst2.Name);

            container.RegisterType<ITest3, Test3>();

            var inst1 = container.Resolve<ITest1>();
            inst1.Name = "test1";
            var inst3 = container.Resolve<ITest3>(overrides: new[] { new TypeOverride(typeof(ITest1), inst1), new TypeOverride(typeof(ITest2), inst2) });

            Assert.IsInstanceOfType(inst3, typeof(Test3));
            Assert.AreEqual("test1fakeNametest1", inst3.Name);
        }
Example #53
0
        public void EnumerableTests_Parallel_Resolve()
        {
            IStashboxContainer container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.RegisterType<ITest1, Test11>();
            container.RegisterType<ITest1, Test12>();
            container.RegisterType<ITest2, Test2>("enumerable");
            container.RegisterType<ITest2, Test22>("array");

            Parallel.For(0, 50000, (i) =>
            {
                var enumerable = container.Resolve<ITest2>("enumerable");
                var array = container.Resolve<ITest2>("array");

                var all = container.Resolve<IEnumerable<ITest2>>();

                Assert.AreEqual(2, all.Count());
            });
        }
        public void InjectionMemberTests_BuildUp()
        {
            using (var container = new StashboxContainer())
            {
                container.RegisterType<ITest, Test>();

                var test1 = new Test1();
                container.BuildUp<ITest1>(test1);

                var inst = container.Resolve<ITest1>();

                Assert.IsNotNull(inst);
                Assert.IsNotNull(inst.Test);
                Assert.IsInstanceOfType(inst, typeof(Test1));
                Assert.IsInstanceOfType(inst.Test, typeof(Test));

                Assert.IsNotNull(((Test1)inst).TestFieldProperty);
                Assert.IsInstanceOfType(((Test1)inst).TestFieldProperty, typeof(Test));
            }
        }
        public void StandardResolveTests_Resolve()
        {
            using (IStashboxContainer container = new StashboxContainer())
            {
                container.RegisterType<ITest1, Test1>();
                container.RegisterType<ITest2, Test2>();
                container.RegisterType<ITest3, Test3>();

                var test3 = container.Resolve<ITest3>();
                var test2 = container.Resolve<ITest2>();
                var test1 = container.Resolve<ITest1>();

                Assert.IsNotNull(test3);
                Assert.IsNotNull(test2);
                Assert.IsNotNull(test1);

                Assert.IsInstanceOfType(test1, typeof(Test1));
                Assert.IsInstanceOfType(test2, typeof(Test2));
                Assert.IsInstanceOfType(test3, typeof(Test3));
            }
        }
        public void BuildExtensionManagerTests_CreateCopy()
        {
            var post = new Mock<IRegistrationExtension>();
            var post2 = new Mock<IRegistrationExtension>();
            using (var container = new StashboxContainer())
            {
                container.RegisterExtension(post.Object);

                post.Setup(p => p.CreateCopy()).Returns(post2.Object).Verifiable();

                using (var child = container.CreateChildContainer())
                {
                    child.RegisterInstance(new object());

                    post2.Verify(p => p.Initialize(child.ContainerContext));
                    post2.Verify(p => p.OnRegistration(child.ContainerContext,
                        It.IsAny<RegistrationInfo>(), null));
                }

                post2.Verify(p => p.CleanUp());
            }

            post.Verify(p => p.CleanUp());
        }
Example #57
0
        public void AttributeTests_Parallel_Lazy_Resolve()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>("test1");
            container.RegisterType<ITest1, Test11>("test11");
            container.RegisterType<ITest1, Test12>("test12");
            container.RegisterType<ITest2, Test2>("test2");
            container.RegisterType<ITest2, Test22>("test22");
            container.RegisterType<ITest3, Test3>();
            container.RegisterType<ITest4, Test4>();
            container.RegisterType<Test33>();

            Parallel.For(0, 50000, (i) =>
            {
                var test1 = container.Resolve<Lazy<ITest1>>();
                var test2 = container.Resolve<Lazy<ITest2>>("test2");
                var test3 = container.Resolve<Lazy<ITest3>>();
                var test4 = container.Resolve<Lazy<ITest4>>();
                var test33 = container.Resolve<Lazy<Test33>>();

                Assert.IsNotNull(test1.Value);
                Assert.IsNotNull(test2.Value);
                Assert.IsNotNull(test3.Value);
                Assert.IsNotNull(test4.Value);

                Assert.IsTrue(test3.Value.MethodInvoked);
                Assert.IsTrue(test4.Value.MethodInvoked);

                Assert.IsInstanceOfType(test2.Value.test1, typeof(Test1));
                Assert.IsInstanceOfType(test3.Value.test1, typeof(Test11));
                Assert.IsInstanceOfType(test3.Value.test2, typeof(Test22));

                Assert.IsInstanceOfType(test4.Value.test1.Value, typeof(Test11));
                Assert.IsInstanceOfType(test4.Value.test2.Value, typeof(Test22));
            });
        }
Example #58
0
        public void AttributeTests_Resolve()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>("test1");
            container.RegisterType<ITest1, Test11>("test11");
            container.RegisterType<ITest1, Test12>("test12");
            container.RegisterType<ITest2, Test2>("test2");
            container.PrepareType<ITest2, Test22>().WithName("test22").Register();
            container.RegisterType<ITest3, Test3>();
            container.RegisterType<ITest4, Test4>();
            container.RegisterType<Test33>();

            var test1 = container.Resolve<ITest1>();
            var test2 = container.Resolve<ITest2>("test2");
            var test3 = container.Resolve<ITest3>();
            var test4 = container.Resolve<Lazy<ITest4>>();
            var test33 = container.Resolve<Test33>();

            Assert.IsNotNull(test1);
            Assert.IsNotNull(test2);
            Assert.IsNotNull(test3);
            Assert.IsNotNull(test33);
            Assert.IsNotNull(test4.Value);

            Assert.IsTrue(test3.MethodInvoked);

            Assert.IsInstanceOfType(test2.test1, typeof(Test1));
            Assert.IsInstanceOfType(test3.test1, typeof(Test11));
            Assert.IsInstanceOfType(test3.test2, typeof(Test22));
        }
Example #59
0
        public void ConditionalTests_ParentTypeCondition_Third_NonGeneric()
        {
            var container = new StashboxContainer();
            container.RegisterType<ITest1, Test1>();
            container.RegisterType<ITest1, Test11>();
            container.PrepareType<ITest1, Test12>().WhenDependantIs(typeof(Test2)).Register();
            container.RegisterType<ITest2, Test2>();

            var test2 = container.Resolve<ITest2>();

            Assert.IsInstanceOfType(test2.test1, typeof(Test12));
            Assert.IsInstanceOfType(test2.test12, typeof(Test12));
        }
Example #60
0
        public void LifetimeTests_Resolve_Parallel_Lazy()
        {
            using (IStashboxContainer container = new StashboxContainer())
            {
                container.PrepareType<ITest1, Test1>().WithLifetime(new SingletonLifetime()).Register();
                container.RegisterType<ITest2, Test2>();
                container.RegisterType<ITest3, Test3>();

                Parallel.For(0, 50000, (i) =>
                {
                    var test1 = container.Resolve<Lazy<ITest1>>();
                    test1.Value.Name = "test1";
                    var test2 = container.Resolve<Lazy<ITest2>>();
                    var test3 = container.Resolve<Lazy<ITest3>>();

                    Assert.IsNotNull(test1.Value);
                    Assert.IsNotNull(test2.Value);
                    Assert.IsNotNull(test3.Value);
                });
            }
        }