asp.net高级反射,动态生成的bean如何处理赋值问题?
2007-11-22 11:04
681 查看
最近在写一个四层架构,遇到了一个瓶颈有关于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方法。找了好久还是想不通。 希望有哪位高手可以帮我解决一下,或给点解决的办法和建议。 在这里先谢谢了。 代码图片:
相关文章推荐
- 基于ASP.net C#技术来实现,介绍如何处理Session对象变量失效的问题
- 关于ASP.NET中动态生成控件问题,急求解决!
- 利用ASP.NET一般处理程序动态生成Web图像(转)
- ASP.NET中如何动态生成模板列
- 如何处理ASP.NET Core中HTML5客户端路由回退的问题
- linq 把 xml的值 赋值给其他? linq to xml 如何赋值? xml里面的特殊符号转义,asp.net word域合并 Aspose.Words 在线生成word
- ASP.NET如何批量保存动态生成的文本框?
- Asp.net中如何处理一个站点不同Web应用通用Session的问题
- 如何处理asp.net的webapi项目的测试环境与生产环境的help页面可见/不可见问题。
- asp.net C#动态添加创建生成button按钮控件没有触发执行响应click绑定事件处理
- ASP.NET 4.0 生成 eurl.axd Http异常错误的处理方法 (汗IIS 怎这么多莫名其妙的问题)
- ASP.NET中的路径问题如何处理
- asp.net 事务的处理,dts 的设置,asp.net三种事务处理方法,三层架构,微软企业库,动软生成器生成的代码下如何使用事务
- 利用ASP.NET一般处理程序动态生成Web图像
- asp.net如何获取页面动态生成的服务器控件
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- ASP.NET中如何动态生成模板列(转)
- 如何在asp.net中动态生成验证码(转)
- 如何在asp.net中动态生成验证码
- 如何:在 ASP.NET 网页中对事件处理程序进行运行时动态绑定