public void CanOverrideMultipleInjectionPropertiesWithOverrideCollection()
        {
            TypeToInjectForPropertyOverride1 defaultObject  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
            int defaultValue            = 111;
            int overrideValue           = 222;
            PropertyOverrides overrides = new PropertyOverrides();

            overrides.Add("X", overrideValue);
            overrides.Add("InjectedObject", overrideObject);

            IUnityContainer container = new UnityContainer();

            container.RegisterType <SubjectType1ToInjectForPropertyOverride>(
                new InjectionProperty("InjectedObject", defaultObject), new InjectionProperty("X", defaultValue));
            var result1 =
                (SubjectType1ToInjectForPropertyOverride)
                container.Resolve(typeof(SubjectType1ToInjectForPropertyOverride), overrides);
            var result2 = container.Resolve <SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual <int>(result1.X, overrideValue);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
            Assert.AreEqual <int>(result2.X, defaultValue);
        }
        public void TestPropertyOverridesWithExternallyControlledLifeTimeManager()
        {
            TypeToInjectForPropertyOverride1 defaultInjected   = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected  = new TypeToInjectForPropertyOverride2(222);
            TypeToInjectForPropertyOverride3 overrideInjected1 = new TypeToInjectForPropertyOverride3(333);

            UnityContainer container = new UnityContainer();

            container.RegisterType <ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                new ExternallyControlledLifetimeManager(), new InjectionProperty("InjectedObject", defaultInjected));

            var result1 = container.Resolve <SubjectType1ToInjectForPropertyOverride>();
            var result2 =
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideInjected));

            Assert.AreEqual <SubjectType1ToInjectForPropertyOverride>(result1, result2);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));

            result1 = null;
            result2 = null;
            System.GC.Collect();

            var result3 =
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideInjected1));

            Assert.IsInstanceOfType(result3.InjectedObject, typeof(TypeToInjectForPropertyOverride3));
        }
        public void CanOverrideInjectionPropertyForPolymorphicTypesInCollection()
        {
            TypeToInjectForPropertyOverride1 defaultInjected  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected = new TypeToInjectForPropertyOverride2(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType <ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                "Test1", new InjectionProperty("InjectedObject", defaultInjected));
            container.RegisterType <ISubjectTypeToInjectForPropertyOverride, SubjectType2ToInjectForPropertyOverride>(
                "Test2", new InjectionProperty("InjectedObject", defaultInjected));
            container.RegisterType <ISubjectTypeToInjectForPropertyOverride, SubjectType3ToInjectForPropertyOverride>(
                "Test3", new InjectionProperty("InjectedObject", defaultInjected));

            var resultList =
                container.ResolveAll <ISubjectTypeToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                    overrideInjected));

            int count = 0;

            foreach (var result in resultList)
            {
                count++;
                Assert.IsInstanceOfType(result.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            }

            Assert.AreEqual <int>(3, count);
        }
Exemplo n.º 4
0
 private static void ResolveWithOverride1()
 {
     for (int i = 0; i < iterationCount; i++)
     {
         TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
         var result = container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject", overrideObject));
         override1InjectedObjectList.Add(result);
     }
 }
 private static void ResolveWithOverride1()
 {
     for (int i = 0; i < iterationCount; i++)
     {
         TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
         var result = container.Resolve<SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject", overrideObject));
         override1InjectedObjectList.Add(result);
     }
 }
        public void CanOverrideInjectionPropertyWithNull()
        {
            TypeToInjectForPropertyOverride1 defaultObject  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = null;

            IUnityContainer container = new UnityContainer();

            container.RegisterType <SubjectType1ToInjectForPropertyOverride>(new InjectionProperty("InjectedObject",
                                                                                                   defaultObject));

            AssertHelper.ThrowsException <ArgumentNullException>(
                () =>
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideObject)));
        }
        public void CanOverrideInjectionProperty()
        {
            TypeToInjectForPropertyOverride1 defaultObject = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);

            IUnityContainer container = new UnityContainer();

            container.RegisterType<SubjectType1ToInjectForPropertyOverride>(new InjectionProperty("InjectedObject",
                defaultObject));
            var result1 =
                container.Resolve<SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                    overrideObject));
            var result2 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
        }
        public void CanOverrideInjectionProperty()
        {
            TypeToInjectForPropertyOverride1 defaultObject  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);

            IUnityContainer container = new UnityContainer();

            container.RegisterType <SubjectType1ToInjectForPropertyOverride>(new InjectionProperty("InjectedObject",
                                                                                                   defaultObject));
            var result1 =
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideObject));
            var result2 = container.Resolve <SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
        }
        public void CannotOverrideInjectionPropertyForContainerControlledInstanceUsingResolve()
        {
            TypeToInjectForPropertyOverride1 defaultInjected  = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected = new TypeToInjectForPropertyOverride2(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType <ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                new ContainerControlledLifetimeManager(), new InjectionProperty("InjectedObject", defaultInjected));

            var result1 = container.Resolve <SubjectType1ToInjectForPropertyOverride>();
            var result2 =
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideInjected));

            Assert.AreEqual <SubjectType1ToInjectForPropertyOverride>(result1, result2);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
            Assert.AreEqual <int>(111, result2.InjectedObject.Value);
        }
        public void CanOverrideMultipleInjectionProperties()
        {
            TypeToInjectForPropertyOverride1 defaultObject = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideObject = new TypeToInjectForPropertyOverride2(222);
            int defaultValue = 111;
            int overrideValue = 222;

            IUnityContainer container = new UnityContainer();

            container.RegisterType<SubjectType1ToInjectForPropertyOverride>(
                new InjectionProperty("InjectedObject", defaultObject), new InjectionProperty("X", defaultValue));
            var result1 =
                container.Resolve<SubjectType1ToInjectForPropertyOverride>(
                    new PropertyOverride("InjectedObject", overrideObject), new PropertyOverride("X", overrideValue));
            var result2 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();

            Assert.IsInstanceOfType(result1.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual<int>(result1.X, overrideValue);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
            Assert.AreEqual<int>(result2.X, defaultValue);
        }
        public void TestPropertyOverridesWithExternallyControlledLifeTimeManager()
        {
            TypeToInjectForPropertyOverride1 defaultInjected = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected = new TypeToInjectForPropertyOverride2(222);
            TypeToInjectForPropertyOverride3 overrideInjected1 = new TypeToInjectForPropertyOverride3(333);

            UnityContainer container = new UnityContainer();

            container.RegisterType<ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                new ExternallyControlledLifetimeManager(), new InjectionProperty("InjectedObject", defaultInjected));

            var result1 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();
            var result2 =
                container.Resolve<SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                    overrideInjected));

            Assert.AreEqual<SubjectType1ToInjectForPropertyOverride>(result1, result2);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride1));

            result1 = null;
            result2 = null;
            System.GC.Collect();

            var result3 =
                container.Resolve<SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                    overrideInjected1));

            Assert.IsInstanceOfType(result3.InjectedObject, typeof(TypeToInjectForPropertyOverride3));
        }
        public void CanOverrideInjectionPropertyForContainerControlledInstanceUsingBuildUp()
        {
            TypeToInjectForPropertyOverride1 defaultInjected = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected = new TypeToInjectForPropertyOverride2(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType<ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                new ContainerControlledLifetimeManager(), new InjectionProperty("InjectedObject", defaultInjected));

            var result1 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();
            var result2 = container.BuildUp<SubjectType1ToInjectForPropertyOverride>(result1,
                new PropertyOverride("InjectedObject", overrideInjected));
            var result3 = container.Resolve<SubjectType1ToInjectForPropertyOverride>();

            Assert.AreEqual<SubjectType1ToInjectForPropertyOverride>(result1, result2);
            Assert.IsInstanceOfType(result2.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual<int>(222, result2.InjectedObject.Value);
            Assert.IsInstanceOfType(result3.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            Assert.AreEqual<int>(222, result3.InjectedObject.Value);
        }
        public void CanOverrideInjectionPropertyForPolymorphicTypesInCollection()
        {
            TypeToInjectForPropertyOverride1 defaultInjected = new TypeToInjectForPropertyOverride1(111);
            TypeToInjectForPropertyOverride2 overrideInjected = new TypeToInjectForPropertyOverride2(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType<ISubjectTypeToInjectForPropertyOverride, SubjectType1ToInjectForPropertyOverride>(
                "Test1", new InjectionProperty("InjectedObject", defaultInjected));
            container.RegisterType<ISubjectTypeToInjectForPropertyOverride, SubjectType2ToInjectForPropertyOverride>(
                "Test2", new InjectionProperty("InjectedObject", defaultInjected));
            container.RegisterType<ISubjectTypeToInjectForPropertyOverride, SubjectType3ToInjectForPropertyOverride>(
                "Test3", new InjectionProperty("InjectedObject", defaultInjected));

            var resultList =
                container.ResolveAll<ISubjectTypeToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                    overrideInjected));

            int count = 0;
            foreach (var result in resultList)
            {
                count++;
                Assert.IsInstanceOfType(result.InjectedObject, typeof(TypeToInjectForPropertyOverride2));
            }

            Assert.AreEqual<int>(3, count);
        }