Ejemplo n.º 1
0
        public void SimplePropertyBuilder_should_not_generate_a_value_if_optional()
        {
            var obj      = new Class1();
            var propInfo = typeof(Class1).GetProperty("nullableProperty1");

            var lookup = Mock.Of <IPropertyInfoMetadataLookup>(
                f =>
                f.GetMetadata(propInfo) == new Parameter
            {
                required = false
            });

            var builder = new SimplePropertyBuilder(lookup);

            Assert.IsTrue(builder.BuildProperty(obj, propInfo));
            Assert.AreEqual(default(int?), obj.nullableProperty1);
        }
Ejemplo n.º 2
0
        public void SimplePropertyBuilder_should_ignore_nullable_properties()
        {
            var obj      = new Class1();
            var propInfo = typeof(Class1).GetProperty("nullableProperty1");

            var lookup = Mock.Of <IPropertyInfoMetadataLookup>(
                f =>
                f.GetMetadata(propInfo) == new Parameter
            {
                required = false
            });

            var builder = new SimplePropertyBuilder(lookup);

            Assert.IsTrue(builder.BuildProperty(obj, propInfo));
            Assert.IsFalse(obj.nullableProperty1.HasValue);
        }
        protected virtual void AddSimpleProperty(PropertyInfo pi)
        {
            var pb = DefineProperty(pi.Name, pi.PropertyType);

            pb.AddAttribute <DataMemberAttribute>();

            var fb         = GetOrCreatePrivateField(GetFieldName(pi), pi.PropertyType);
            var attributes = pi.GetCustomAttributes(true);
            var dvp        = attributes.OfType <IDefaultValueProvider>().FirstOrDefault();

            if (dvp is null)
            {
                var dva = attributes.OfType <System.ComponentModel.DefaultValueAttribute>().FirstOrDefault();
                if (dva is not null)
                {
                    dvp = new DefaultValueAttribute(dva.Value);
                }
            }

            if (dvp is not null)
            {
                AddDefaultFieldValue(fb, dvp);
            }

            var spb = new SimplePropertyBuilder(pi, pb, fb, dvp);

            if (pi.CanRead)
            {
                AddSimplePropertyGetter(spb);
            }

            if (pi.CanWrite)
            {
                AddSimplePropertySetter(spb);
            }
        }