コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        public void EmptyBuilderWillCreateAnyValueTypeWithDefaultValue()
        {
            Builder builder = new Builder();
            Locator locator = CreateLocator();

            int actual = builder.BuildUp <int>(locator, null, null);

            Assert.AreEqual(default(int), actual);
        }
コード例 #11
0
        public void CanCreateGenericType()
        {
            Builder builder = new Builder();
            Locator locator = CreateLocator();

            GenericObject <int> result = builder.BuildUp <GenericObject <int> >(locator, null, null);

            Assert.IsNotNull(result);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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);
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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);
        }