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