static CustomAttributeBuilder CreateAttributeForProperty(AttrDto attrDto) { ConstructorInfo myConstructorInfo = attrDto.AttrType.GetConstructor(attrDto.AttrParams); return(new CustomAttributeBuilder(myConstructorInfo, attrDto.AttrParamValues)); }
static Type CreateDynamicTypeWithNewProps(List <PropertyAttr> list, string className, Type baseClass, AttrDto attrDto) { TypeBuilder tb = GetTypeBuilder(className, baseClass); ConstructorBuilder constructor = tb.DefineDefaultConstructor(MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName); foreach (var field in list) { CreateProperty(tb, field.Name, field.Type, attrDto); } Type objectType = tb.CreateType(); return(objectType); }
static void CreateProperty(TypeBuilder tb, string propertyName, Type propertyType, AttrDto attrDto) { FieldBuilder fieldBuilder = tb.DefineField("_" + propertyName, propertyType, FieldAttributes.Private); PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null); if (attrDto != null) { propertyBuilder.SetCustomAttribute(CreateAttributeForProperty(attrDto)); } propertyBuilder.SetGetMethod(GetPropBuilder(tb, fieldBuilder, propertyName, propertyType)); propertyBuilder.SetSetMethod(SetPropBuilder(tb, fieldBuilder, propertyName, propertyType)); }