コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public void CanOverridePropertyWithoutDefaultWithDependencyAttribute()
        {
            TypeToInjectForPropertyOverride1 overrideObject = new TypeToInjectForPropertyOverride1(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType <SubjectType1ToInjectForPropertyOverride>();
            var result =
                container.Resolve <SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                                                                                                 overrideObject));

            Assert.IsInstanceOfType(result.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
        }
コード例 #5
0
        public void CanOverrideWithPerThreadLifetimeManagerWithDifferentOverridesInDifferenThreads()
        {
            var defaultObject = new TypeToInjectForPropertyOverride1(123);

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

            var threadStartDefault   = new ThreadStart(ResolveWithDefault);
            var threadStartOverride1 = new ThreadStart(ResolveWithOverride1);
            var threadStartOverride2 = new ThreadStart(ResolveWithOverride2);
            var threadList           = new Thread[3];

            threadList[0] = new Thread(threadStartDefault);
            threadList[1] = new Thread(threadStartOverride1);
            threadList[2] = new Thread(threadStartOverride2);

            for (int i = 0; i < 3; i++)
            {
                threadList[i].Start();
            }

            for (int i = 0; i < 3; i++)
            {
                threadList[i].Join();
            }

            var result1 = defaultInjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(defaultInjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride1));
                Assert.AreEqual(result1, defaultInjectedObjectList[i]);
            }

            var result2 = override1InjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(override1InjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride2));
                Assert.AreEqual(result2, override1InjectedObjectList[i]);
            }

            var result3 = override2InjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(override2InjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride3));
                Assert.AreEqual(result3, override2InjectedObjectList[i]);
            }
        }
コード例 #6
0
        public void CanOverrideWithPerThreadLifetimeManagerWithDifferentOverridesInDifferenThreads()
        {
            TypeToInjectForPropertyOverride1 defaultObject = new TypeToInjectForPropertyOverride1(123);

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

            ThreadStart threadStartDefault = new ThreadStart(ResolveWithDefault);
            ThreadStart threadStartOverride1 = new ThreadStart(ResolveWithOverride1);
            ThreadStart threadStartOverride2 = new ThreadStart(ResolveWithOverride2);
            Thread[] threadList = new Thread[3];

            threadList[0] = new Thread(threadStartDefault);
            threadList[1] = new Thread(threadStartOverride1);
            threadList[2] = new Thread(threadStartOverride2);

            for (int i = 0; i < 3; i++)
            {
                threadList[i].Start();
            }

            for (int i = 0; i < 3; i++)
            {
                threadList[i].Join();
            }

            var result1 = defaultInjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(defaultInjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride1));
                Assert.AreEqual(result1, defaultInjectedObjectList[i]);
            }

            var result2 = override1InjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(override1InjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride2));
                Assert.AreEqual(result2, override1InjectedObjectList[i]);
            }

            var result3 = override2InjectedObjectList[0];

            for (int i = 1; i < iterationCount; i++)
            {
                Assert.IsInstanceOfType(override2InjectedObjectList[i].InjectedObject, typeof(TypeToInjectForPropertyOverride3));
                Assert.AreEqual(result3, override2InjectedObjectList[i]);
            }
        }
コード例 #7
0
        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)));
        }
コード例 #8
0
        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)));
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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));
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        public void CanOverridePropertyWithoutDefaultWithDependencyAttribute()
        {
            TypeToInjectForPropertyOverride1 overrideObject = new TypeToInjectForPropertyOverride1(222);

            UnityContainer container = new UnityContainer();

            container.RegisterType<SubjectType1ToInjectForPropertyOverride>();
            var result =
                container.Resolve<SubjectType1ToInjectForPropertyOverride>(new PropertyOverride("InjectedObject",
                    overrideObject));

            Assert.IsInstanceOfType(result.InjectedObject, typeof(TypeToInjectForPropertyOverride1));
        }
コード例 #14
0
        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));
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }