public void InjectorUsesChildInjectorForSpecifiedMapping()
        {
            injector.Map(typeof(RobotFoot));

            InjectionMapping leftFootMapping   = injector.Map(typeof(RobotLeg), "leftLeg");
            Injector         leftChildInjector = injector.CreateChildInjector();

            leftChildInjector.Map(typeof(RobotAnkle));
            leftChildInjector.Map(typeof(RobotFoot)).ToType(typeof(LeftRobotFoot));

            leftFootMapping.SetInjector(leftChildInjector);
            InjectionMapping rightFootMapping   = injector.Map(typeof(RobotLeg), "rightLeg");
            Injector         rightChildInjector = injector.CreateChildInjector();

            rightChildInjector.Map(typeof(RobotAnkle));
            rightChildInjector.Map(typeof(RobotFoot)).ToType(typeof(RightRobotFoot));
            rightFootMapping.SetInjector(rightChildInjector);

            RobotBody robotBody = injector.InstantiateUnmapped <RobotBody>();

            Assert.IsInstanceOf <RightRobotFoot>(robotBody.rightLeg.ankle.foot, "Right RobotLeg should have a RightRobotFoot");
            Assert.IsInstanceOf <LeftRobotFoot>(robotBody.leftLeg.ankle.foot, "Left RobotLeg should have a LeftRobotFoot");
        }
        public void childInjectorDoesntReturnToParentAfterUsingParentInjectorForMissingMappings()
        {
            injector.Map(typeof(RobotAnkle));
            injector.Map(typeof(RobotFoot));
            injector.Map(typeof(RobotToes));

            InjectionMapping leftFootMapping   = injector.Map(typeof(RobotLeg), "leftLeg");
            Injector         leftChildInjector = injector.CreateChildInjector();

            leftChildInjector.Map(typeof(RobotFoot)).ToType(typeof(LeftRobotFoot));
            leftFootMapping.SetInjector(leftChildInjector);

            InjectionMapping rightFootMapping   = injector.Map(typeof(RobotLeg), "rightLeg");
            Injector         rightChildInjector = injector.CreateChildInjector();

            rightChildInjector.Map(typeof(RobotFoot)).ToType(typeof(RightRobotFoot));
            rightFootMapping.SetInjector(rightChildInjector);

            RobotBody robotBody = injector.InstantiateUnmapped <RobotBody>();

            Assert.IsInstanceOf <RightRobotFoot>(robotBody.rightLeg.ankle.foot, "Right RobotFoot should have RightRobotFoot");
            Assert.IsInstanceOf <LeftRobotFoot>(robotBody.leftLeg.ankle.foot, "Left RobotFoot should have LeftRobotFoot");
        }
        public void ChildInjectorUsesParentForMissingMappings()
        {
            injector.Map(typeof(RobotFoot));
            injector.Map(typeof(RobotToes));

            InjectionMapping leftFootMapping   = injector.Map(typeof(RobotLeg), "leftLeg");
            Injector         leftChildInjector = injector.CreateChildInjector();

            leftChildInjector.Map(typeof(RobotAnkle));
            leftChildInjector.Map(typeof(RobotFoot)).ToType(typeof(LeftRobotFoot));
            leftFootMapping.SetInjector(leftChildInjector);

            InjectionMapping rightFootMapping   = injector.Map(typeof(RobotLeg), "rightLeg");
            Injector         rightChildInjector = injector.CreateChildInjector();

            rightChildInjector.Map(typeof(RobotAnkle));
            rightChildInjector.Map(typeof(RobotFoot)).ToType(typeof(RightRobotFoot));
            rightFootMapping.SetInjector(rightChildInjector);

            RobotBody robotBody = injector.InstantiateUnmapped <RobotBody>();

            Assert.IsInstanceOf <RobotToes>(robotBody.rightLeg.ankle.foot.toes, "Right RobotFoot should have toes");
            Assert.IsInstanceOf <RobotToes>(robotBody.leftLeg.ankle.foot.toes, "Right RobotFoot should have toes");
        }