我希望在运行时通过反射生成相互引用的类型。
使用静态代码,我会这样做
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; }
}
我可以成功地生成我的Order和OrderDetails类型,使用值类型属性。
代码看起来像这样:
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);
现在我卡在这一行代码上了:
var pbCustomer = tb.DefineProperty("Customer", PropertyAttributes.None, ???, null);
我需要在DefineProperty方法中传递属性类型,但是此时该类型不存在。现在我可以创建一个Customer的类型生成器,并使用tb.CreateType()
来获取类型,但这并没有帮助,因为Customer还需要引用Order。