public void ChildInheritsParentsConfiguration_RegisterInstanceResolve()
        {
            UnityContainer parent = new UnityContainer();
            ITestContainer obj = new TestContainer();
            
            parent.RegisterInstance<ITestContainer>("InParent", obj);

            IUnityContainer child = parent.CreateChildContainer();
            ITestContainer objtest = child.Resolve<ITestContainer>("InParent");

            Assert.IsNotNull(objtest);
            Assert.AreSame(objtest, obj);
        }
        public void CheckNullHandledInRegisterInstance()
        {
            UnityContainer parent = new UnityContainer();
            TestContainer obj = new TestContainer();

            AssertHelper.ThrowsException<ArgumentNullException>(() => parent.RegisterInstance<TestContainer>(obj, null));
        }
        public void ParentNotDisposedWhenChildDisposed()
        {
            UnityContainer parent = new UnityContainer();
            IUnityContainer child = parent.CreateChildContainer();
            TestContainer obj1 = new TestContainer();
            TestContainer3 obj3 = new TestContainer3();
            parent.RegisterInstance<TestContainer>(obj1);
            child.RegisterInstance<TestContainer3>(obj3);

            child.Dispose();
            //parent not getting disposed
            Assert.IsFalse(obj1.WasDisposed);

            //child getting disposed.
            Assert.IsTrue(obj3.WasDisposed);
        }
        public void ChainOfContainers()
        {
            UnityContainer parent = new UnityContainer();
            IUnityContainer child = parent.CreateChildContainer();
            IUnityContainer child2 = child.CreateChildContainer();
            IUnityContainer child3 = child2.CreateChildContainer();

            TestContainer obj1 = new TestContainer();

            parent.RegisterInstance<TestContainer>("InParent", obj1);
            child.RegisterInstance<TestContainer>("InChild", obj1);
            child2.RegisterInstance<TestContainer>("InChild2", obj1);
            child3.RegisterInstance<TestContainer>("InChild3", obj1);

            object objresolve = child3.Resolve<TestContainer>("InParent");
            object objresolve1 = parent.Resolve<TestContainer>("InChild3");

            Assert.AreSame(obj1, objresolve);
            
            child.Dispose();
            
            //parent not getting disposed
            Assert.IsTrue(obj1.WasDisposed);
        }
        public void ChildInheritsParentsConfiguration_RegisterInstanceResolveAll()
        {
            ITestContainer objdefault = new TestContainer();
            ITestContainer objfirst = new TestContainer1();
            ITestContainer objsecond = new TestContainer2();
            ITestContainer objthird = new TestContainer3();
            UnityContainer parent = new UnityContainer();
            
            parent.RegisterInstance<ITestContainer>(objdefault)
                .RegisterInstance<ITestContainer>("first", objfirst)
                .RegisterInstance<ITestContainer>("second", objsecond);

            IUnityContainer child = parent.CreateChildContainer()
                .RegisterInstance<ITestContainer>("third", objthird);

            List<ITestContainer> list = new List<ITestContainer>(child.ResolveAll<ITestContainer>());
            
            Assert.AreEqual(3, list.Count);
        }