asp.net高级反射,动态生成的bean如何处理赋值问题?

  
  最近在写一个四层架构,遇到了一个瓶颈有关于asp.net高级反射,
动态生成的bean如何赋值问题?
  首先,我查询数据库,得到所有的数据。并将所有的数据保存在DataTable中,
并把查询到的表结构传给getC(DataTable t),动态反射出bean之后,
返回动态生成的MyFirstClass类。

源代码如下:


  /// <summary>
  /// GetC 构造Bean类
  /// </summary>
  /// <param name="d"></param>
  /// <returns></returns>
  public object GetC(DataTable d)
  {
   object objReturn;
   FieldBuilder fieldBuilder = null;//类字段
   PropertyBuilder propertyBuilder = null;//类属性
   MethodAttributes getSetAttr;//指定方法属性的标志
   MethodBuilder methodBuilder = null;//定义并表示动态的方法
   ILGenerator ilGenerator = null;//生成Microsoft 中间语言 MSIL 指令
   Type[] methodArgs ={ typeof(string) };//声明类型数组

   AssemblyName name = new AssemblyName();
   name.Name = "MyFirstAssembly";

   AppDomain ad = System.Threading.Thread.GetDomain();
   AssemblyBuilder abuilder = ad.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

   ModuleBuilder mbuilder = abuilder.DefineDynamicModule("MyFirstModule");

   TypeBuilder theClass = mbuilder.DefineType("MyFirstClass", TypeAttributes.Public | TypeAttributes.Class);
        
   foreach (DataColumn dc in d.Columns)
   {

    fieldBuilder = theClass.DefineField( dc.ColumnName, dc.DataType, FieldAttributes.Public);
    propertyBuilder = theClass.DefineProperty(dc.ColumnName, System.Reflection.PropertyAttributes.HasDefault, dc.DataType, null);
    getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;

    methodBuilder = theClass.DefineMethod("get_" + dc.ColumnName, getSetAttr, typeof(string), Type.EmptyTypes);
    ilGenerator = methodBuilder.GetILGenerator();
    ilGenerator.Emit(OpCodes.Ldarg_0);
    ilGenerator.Emit(OpCodes.Ldfld, fieldBuilder);
    ilGenerator.Emit(OpCodes.Ret);
    propertyBuilder.SetGetMethod(methodBuilder);

    methodBuilder = theClass.DefineMethod("set_" + dc.ColumnName,
     MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName,
     typeof(void), methodArgs);
    ilGenerator = methodBuilder.GetILGenerator();
    ilGenerator.Emit(OpCodes.Ldarg_0);
    ilGenerator.Emit(OpCodes.Ldarg_1);
    ilGenerator.Emit(OpCodes.Stfld, fieldBuilder);
    ilGenerator.Emit(OpCodes.Ret);
    propertyBuilder.SetSetMethod(methodBuilder);
   }
   Type ReturnClass = theClass.CreateType();//创建引用
   objReturn = Activator.CreateInstance(ReturnClass);//创建实例化

   return objReturn;

  }

 

     关键问题就是我不知道如何赋值给它的set方法。找了好久还是想不通。

希望有哪位高手可以帮我解决一下,或给点解决的办法和建议。

在这里先谢谢了。

代码图片:
 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值