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 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 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); }
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)); }
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]); } }
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]); } }
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 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 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)); }
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); }