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