Jür*_*ock 6 .net c# reflection reflection.emit
我想在运行时通过反射生成类型,引用彼此.
使用静态代码,我会这样做
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
public int Id { get; set; }
public Order Order { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以使用值类型属性成功生成我的Order和OrderDetails Type.
代码看起来像这样
var aName = new System.Reflection.AssemblyName("DynamicAssembly");
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
aName, System.Reflection.Emit.AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule(aName.Name);
var tb = mb.DefineType("Order",
System.Reflection.TypeAttributes.Public, typeof(Object));
var pbId = tb.DefineProperty("Id", PropertyAttributes.None, typeof(int), null);
Run Code Online (Sandbox Code Playgroud)
现在我被困在这条线上:
var pbCustomer = tb.DefineProperty("Customer", PropertyAttributes.None, ???, null);
Run Code Online (Sandbox Code Playgroud)
我需要将属性的类型传递给DefineProperty方法,但此时类型不存在.现在我可以在此时为客户创建一个类型构建器并用于tb.CreateType()获取类型,但这无济于事,因为客户也需要引用Order.
你的最后一段是大致正确的,但是TypeBuilder派生自Type,所以你不需要打电话CreateType.也就是说,为每个递归类型创建类型构建器,然后定义将各个构建器本身作为返回类型传递的属性.
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |