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 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);
            }
        }
        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);
            }
        }
Exemple #4
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());
        }
Exemple #6
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);
            }
        }
Exemple #7
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);
        }
Exemple #8
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));
        }
Exemple #9
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);
                });
            }
        }
        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));
        }
        public void InjectionMemberTests_Resolve_InjectionParameter()
        {
            var container = new StashboxContainer();
            container.PrepareType<ITest2, Test2>().WithInjectionParameters(new InjectionParameter { Name = "Name", Value = "test" }).Register();

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

            Assert.IsNotNull(inst);
            Assert.IsInstanceOfType(inst, typeof(Test2));
            Assert.AreEqual("test", inst.Name);
        }
        public void FactoryBuildUpTests_Resolve_OneParam()
        {
            using (var container = new StashboxContainer())
            {
                container.PrepareType<ITest, Test>().WithFactory((a) => new Test((string)a)).Register();
                container.RegisterType<ITest1, Test1>();

                var inst = container.Resolve<ITest1>(factoryParameters: new[] { "test" });

                Assert.IsInstanceOfType(inst.Test, typeof(Test));
                Assert.AreEqual("test", inst.Test.Name);
            }
        }
Exemple #13
0
        public void OverrideTests_Resolve_Parallel_Lazy()
        {
            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<Lazy<ITest2>>();

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

            container.RegisterType<ITest3, Test3>();

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

                Assert.IsInstanceOfType(inst3.Value, typeof(Test3));
                Assert.AreEqual("test1fakeNametest1", inst3.Value.Name);
                Assert.IsTrue(inst3.Value.MethodInvoked);
            });
        }