public void CreateComplexObject() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy = new ConstructorPolicy(); policy.AddParameter(new ValueParameter <int>(12)); builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), null); ConstructorPolicy policy2 = new ConstructorPolicy(); policy2.AddParameter(new CreationParameter(typeof(SimpleObject))); builder.Policies.Set <ICreationPolicy>(policy2, typeof(ComplexObject), null); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(SimpleObject), null); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(ComplexObject), null); ComplexObject cm = builder.BuildUp <ComplexObject>(locator, null, null); SimpleObject m = builder.BuildUp <SimpleObject>(locator, null, null); Assert.AreSame(m, cm.SimpleObject); Assert.IsNotNull(cm); Assert.IsNotNull(cm.SimpleObject); Assert.AreEqual(12, cm.SimpleObject.IntParam); }
public void RefParamsCanAskForSpecificallyNamedObjects() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule name=""Object1"" type=""" + FullNameSimpleObject + @""" mode=""Singleton""> <constructor-params> <value-param type=""System.Int32"">12</value-param> </constructor-params> </build-rule> <build-rule name=""Object2"" type=""" + FullNameSimpleObject + @""" mode=""Singleton""> <constructor-params> <value-param type=""System.Int32"">32</value-param> </constructor-params> </build-rule> <build-rule type=""" + FullNameComplexObject + @""" mode=""Singleton""> <constructor-params> <ref-param type=""" + FullNameSimpleObject + @""" name=""Object2"" /> </constructor-params> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); ComplexObject cm = builder.BuildUp <ComplexObject>(locator, null, null); SimpleObject sm = builder.BuildUp <SimpleObject>(locator, "Object2", null); Assert.IsNotNull(cm); Assert.IsNotNull(cm.SimpleObject); Assert.AreEqual(32, cm.SimpleObject.IntParam); Assert.AreSame(sm, cm.SimpleObject); }
public void CanCreateInstances() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameSimpleObject + @""" mode=""Instance""> <constructor-params> <value-param type=""System.Int32"">12</value-param> </constructor-params> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); SimpleObject m1 = builder.BuildUp <SimpleObject>(locator, null, null); SimpleObject m2 = builder.BuildUp <SimpleObject>(locator, null, null); Assert.IsNotNull(m1); Assert.IsNotNull(m2); Assert.AreEqual(12, m1.IntParam); Assert.AreEqual(12, m2.IntParam); Assert.IsTrue(m1 != m2); }
public void RefParamsCanAskForSpecificallyNamedObjects() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy1 = new ConstructorPolicy(); policy1.AddParameter(new ValueParameter <int>(12)); builder.Policies.Set <ICreationPolicy>(policy1, typeof(SimpleObject), "Object1"); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(SimpleObject), "Object1"); ConstructorPolicy policy2 = new ConstructorPolicy(); policy2.AddParameter(new ValueParameter <int>(32)); builder.Policies.Set <ICreationPolicy>(policy2, typeof(SimpleObject), "Object2"); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(SimpleObject), "Object2"); ConstructorPolicy policy3 = new ConstructorPolicy(); policy3.AddParameter(new CreationParameter(typeof(SimpleObject), "Object2")); builder.Policies.Set <ICreationPolicy>(policy3, typeof(ComplexObject), null); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(ComplexObject), null); ComplexObject cm = builder.BuildUp <ComplexObject>(locator, null, null); SimpleObject sm = builder.BuildUp <SimpleObject>(locator, "Object2", null); Assert.IsNotNull(cm); Assert.IsNotNull(cm.SimpleObject); Assert.AreEqual(32, cm.SimpleObject.IntParam); Assert.AreSame(sm, cm.SimpleObject); }
public void CanCreateNamedConcreteObjectByAskingForNamedInterface() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameSimpleObject + @""" name=""Foo"" mode=""Instance""> <constructor-params> <value-param type=""System.Int32"">12</value-param> </constructor-params> </build-rule> <build-rule name=""sm2"" type=""" + FullNameISimpleObject + @""" mode=""Instance""> <mapped-type type=""" + FullNameSimpleObject + @""" name=""Foo""/> </build-rule> <build-rule type=""" + FullNameISimpleObject + @""" mode=""Instance""> <mapped-type type=""" + FullNameSimpleObject + @"""/> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); ISimpleObject sm1 = builder.BuildUp <ISimpleObject>(locator, null, null); ISimpleObject sm2 = builder.BuildUp <ISimpleObject>(locator, "sm2", null); Assert.IsNotNull(sm1); Assert.IsNotNull(sm2); Assert.IsTrue(sm1 is SimpleObject); Assert.IsTrue(sm2 is SimpleObject); Assert.AreEqual(0, ((SimpleObject)sm1).IntParam); Assert.AreEqual(12, ((SimpleObject)sm2).IntParam); }
public void CanCreateSingletonObjectWithDefaultObjectBuilder() { Builder builder = new Builder(); Locator locator = CreateLocator(); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(MockObject), "foo"); MockObject obj1 = builder.BuildUp <MockObject>(locator, "foo", null); MockObject obj2 = builder.BuildUp <MockObject>(locator, "foo", null); Assert.AreSame(obj1, obj2); }
public void SingletonPolicyBasedOnConcreteTypeRatherThanRequestedType() { Builder builder = new Builder(); Locator locator = CreateLocator(); builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(Foo), null), typeof(IFoo), null); builder.Policies.SetDefault <ISingletonPolicy>(new SingletonPolicy(true)); object obj1 = builder.BuildUp(locator, typeof(IFoo), null, null); object obj2 = builder.BuildUp(locator, typeof(IFoo), null, null); Assert.AreSame(obj1, obj2); }
public void CanCreateSingleton() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy = new ConstructorPolicy(); policy.AddParameter(new ValueParameter <int>(12)); builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), null); builder.Policies.Set <ISingletonPolicy>(new SingletonPolicy(true), typeof(SimpleObject), null); SimpleObject m1 = builder.BuildUp <SimpleObject>(locator, null, null); SimpleObject m2 = builder.BuildUp <SimpleObject>(locator, null, null); Assert.AreSame(m1, m2); }
public void CanInjectMultiplePropertiesIncludingCreatedObjects() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameSimpleObject + @""" mode=""Instance""> <constructor-params> <value-param type=""System.Int32"">15</value-param> </constructor-params> </build-rule> <build-rule type=""" + FullNameComplexObject + @""" mode=""Instance""> <property name=""StringProperty""> <value-param type=""System.String"">Bar is here</value-param> </property> <property name=""SimpleObject""> <ref-param type=""" + FullNameSimpleObject + @""" /> </property> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); ComplexObject co = builder.BuildUp <ComplexObject>(locator, null, null); Assert.IsNotNull(co); Assert.IsNotNull(co.SimpleObject); Assert.AreEqual("Bar is here", co.StringProperty); Assert.AreEqual(15, co.SimpleObject.IntParam); }
public void EmptyBuilderWillCreateAnyValueTypeWithDefaultValue() { Builder builder = new Builder(); Locator locator = CreateLocator(); int actual = builder.BuildUp <int>(locator, null, null); Assert.AreEqual(default(int), actual); }
public void CanCreateGenericType() { Builder builder = new Builder(); Locator locator = CreateLocator(); GenericObject <int> result = builder.BuildUp <GenericObject <int> >(locator, null, null); Assert.IsNotNull(result); }
public void EmptyBuilderWillCreateSimpleInstances() { Builder builder = new Builder(); Locator locator = CreateLocator(); SimpleObject o = builder.BuildUp <SimpleObject>(locator, null, null); Assert.IsNotNull(o); Assert.AreEqual(0, o.IntParam); }
public void CanCreateInstances() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy = new ConstructorPolicy(); policy.AddParameter(new ValueParameter <int>(12)); builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), null); SimpleObject m1 = builder.BuildUp <SimpleObject>(locator, null, null); SimpleObject m2 = builder.BuildUp <SimpleObject>(locator, null, null); Assert.IsNotNull(m1); Assert.IsNotNull(m2); Assert.AreEqual(12, m1.IntParam); Assert.AreEqual(12, m2.IntParam); Assert.IsTrue(m1 != m2); }
public void EmptyBuilderWillCreateComplexInstances() { Builder builder = new Builder(); Locator locator = CreateLocator(); ComplexObject o = builder.BuildUp <ComplexObject>(locator, null, null); Assert.IsNotNull(o); Assert.IsNotNull(o.SimpleObject); Assert.AreEqual(default(int), o.SimpleObject.IntParam); }
public void CanCreateNamedConcreteObjectByAskingForNamedInterface() { Builder builder = new Builder(); ConstructorPolicy policy = new ConstructorPolicy(new ValueParameter <int>(12)); builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), "Foo"); builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), null), typeof(ISimpleObject), null); builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), "Foo"), typeof(ISimpleObject), "sm2"); Locator locator = CreateLocator(); ISimpleObject sm1 = builder.BuildUp <ISimpleObject>(locator, null, null); ISimpleObject sm2 = builder.BuildUp <ISimpleObject>(locator, "sm2", null); Assert.IsNotNull(sm1); Assert.IsNotNull(sm2); Assert.IsTrue(sm1 is SimpleObject); Assert.IsTrue(sm2 is SimpleObject); Assert.AreEqual(0, ((SimpleObject)sm1).IntParam); Assert.AreEqual(12, ((SimpleObject)sm2).IntParam); }
public void BuilderWithNoStrategiesThrowsWhenBuilding() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <strategies include-default=""false"" /> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); builder.BuildUp <object>(locator, null, null); }
public void CanCreateSingleton() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameSimpleObject + @""" mode=""Singleton""> <constructor-params> <value-param type=""System.Int32"">12</value-param> </constructor-params> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); SimpleObject m1 = builder.BuildUp <SimpleObject>(locator, null, null); SimpleObject m2 = builder.BuildUp <SimpleObject>(locator, null, null); Assert.AreSame(m1, m2); }
public void CanAddStrategiesToBuilder() { Builder builder = new Builder(); MockStrategy strategy = new MockStrategy(); Locator locator = CreateLocator(); builder.Strategies.Add(strategy, BuilderStage.PostInitialization); builder.BuildUp(locator, typeof(object), null, null); Assert.IsTrue(strategy.WasCalled); }
public void CanCreateConcreteObjectByAskingForInterface() { Builder builder = new Builder(); builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), null), typeof(ISimpleObject), null); Locator locator = CreateLocator(); ISimpleObject sm = builder.BuildUp <ISimpleObject>(locator, null, null); Assert.IsNotNull(sm); Assert.IsTrue(sm is SimpleObject); }
public void CanMapTypesWithDefaultObjectBuilder() { Builder builder = new Builder(); Locator locator = CreateLocator(); TypeMappingPolicy policy = new TypeMappingPolicy(typeof(MockObject), null); builder.Policies.Set <ITypeMappingPolicy>(policy, typeof(IMockObject), null); IMockObject obj = builder.BuildUp <IMockObject>(locator, null, null); Assert.IsTrue(obj is MockObject); }
public void CanCreateObjectWithPropertyInjectionWithDefaultObjectBuilder() { Builder builder = new Builder(); Locator locator = CreateLocator(); PropertySetterPolicy policy = new PropertySetterPolicy(); policy.Properties.Add("IntProp", new PropertySetterInfo("IntProp", new ValueParameter <int>(64))); builder.Policies.Set <IPropertySetterPolicy>(policy, typeof(PropertyObject), null); PropertyObject obj = builder.BuildUp <PropertyObject>(locator, null, null); Assert.AreEqual(64, obj.IntProp); }
public void CanAddPoliciesToBuilderForTypeAndID() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy = new ConstructorPolicy(); policy.AddParameter(new ValueParameter <int>(14)); builder.Policies.Set <ICreationPolicy>(policy, typeof(MockObject), "foo"); MockObject obj = builder.BuildUp <MockObject>(locator, "foo", null); Assert.IsNotNull(obj); Assert.AreEqual(14, obj.IntValue); }
public void CanInjectValuesIntoProperties() { Builder builder = new Builder(); Locator locator = CreateLocator(); PropertySetterPolicy policy = new PropertySetterPolicy(); policy.Properties.Add("StringProperty", new PropertySetterInfo("StringProperty", new ValueParameter <string>("Bar is here"))); builder.Policies.Set <IPropertySetterPolicy>(policy, typeof(SimpleObject), null); SimpleObject sm = builder.BuildUp <SimpleObject>(locator, null, null); Assert.IsNotNull(sm); Assert.AreEqual("Bar is here", sm.StringProperty); }
public void BuilderCanTakeTransientPolicies() { Builder builder = new Builder(); Locator locator = CreateLocator(); PolicyList policies = new PolicyList(); PropertySetterPolicy policy = new PropertySetterPolicy(); policy.Properties.Add("IntProp", new PropertySetterInfo("IntProp", new ValueParameter <int>(96))); policies.Set <IPropertySetterPolicy>(policy, typeof(PropertyObject), null); PropertyObject obj = builder.BuildUp <PropertyObject>(locator, null, null, policies); Assert.AreEqual(96, obj.IntProp); }
public void CanCreateConcreteObjectByAskingForInterface() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameISimpleObject + @""" mode=""Instance""> <mapped-type type=""" + FullNameSimpleObject + @""" /> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); ISimpleObject sm = builder.BuildUp <ISimpleObject>(locator, null, null); Assert.IsNotNull(sm); Assert.IsTrue(sm is SimpleObject); }
public void TransientPoliciesOverrideBuilderPolicies() { Builder builder = new Builder(); Locator locator = CreateLocator(); PolicyList policies = new PolicyList(); PropertySetterPolicy builderPolicy = new PropertySetterPolicy(); builderPolicy.Properties.Add("IntProp", new PropertySetterInfo("IntProp", new ValueParameter <int>(11))); builder.Policies.Set <IPropertySetterPolicy>(builderPolicy, typeof(PropertyObject), null); PropertySetterPolicy transientPolicy = new PropertySetterPolicy(); transientPolicy.Properties.Add("IntProp", new PropertySetterInfo("IntProp", new ValueParameter <int>(22))); policies.Set <IPropertySetterPolicy>(transientPolicy, typeof(PropertyObject), null); PropertyObject obj = builder.BuildUp <PropertyObject>(locator, null, null, policies); Assert.AreEqual(22, obj.IntProp); }
public void CanInjectValuesIntoProperties() { string config = @"<object-builder-config xmlns=""pag-object-builder""> <build-rules> <build-rule type=""" + FullNameSimpleObject + @""" mode=""Instance""> <property name=""StringProperty""> <value-param type=""System.String"">Bar is here</value-param> </property> </build-rule> </build-rules> </object-builder-config>" ; Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config)); Locator locator = CreateLocator(); SimpleObject sm = builder.BuildUp <SimpleObject>(locator, null, null); Assert.IsNotNull(sm); Assert.AreEqual("Bar is here", sm.StringProperty); }
public void CanInjectMultiplePropertiesIncludingCreatedObjects() { Builder builder = new Builder(); Locator locator = CreateLocator(); ConstructorPolicy policy = new ConstructorPolicy(); policy.AddParameter(new ValueParameter <int>(15)); builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), null); PropertySetterPolicy policy1 = new PropertySetterPolicy(); policy1.Properties.Add("StringProperty", new PropertySetterInfo("StringProperty", new ValueParameter <string>("Bar is here"))); policy1.Properties.Add("SimpleObject", new PropertySetterInfo("SimpleObject", new CreationParameter(typeof(SimpleObject)))); builder.Policies.Set <IPropertySetterPolicy>(policy1, typeof(ComplexObject), null); ComplexObject co = builder.BuildUp <ComplexObject>(locator, null, null); Assert.IsNotNull(co); Assert.IsNotNull(co.SimpleObject); Assert.AreEqual("Bar is here", co.StringProperty); Assert.AreEqual(15, co.SimpleObject.IntParam); }