【发布时间】:2011-12-07 16:38:44
【问题描述】:
我正在创建一个动态 dll 来保存从我的数据库创建的自定义对象。我可以按照我想要的方式创建字段,但是我不明白如何调用构造函数。对于最终生成的结果,我想要:
public class Countries
{
public Countries() { }
public static readonly ReferenceObject USA = new ReferenceObject(120);
public static readonly ReferenceObject CAN = new ReferenceObject(13);
public static readonly ReferenceObject MEX = new ReferenceObject(65);
... //These would be populated from the database
}
我得到的是
public class Countries
{
public Countries() { }
public static readonly ReferenceObject USA;
public static readonly ReferenceObject CAN;
public static readonly ReferenceObject MEX;
...
}
如何将值设置为新的初始化对象?
AppDomain domain = AppDomain.CurrentDomain;
AssemblyName aName = new AssemblyName("DynamicEnums");
AssemblyBuilder ab = domain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Save);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
foreach(ReferenceType rt in GetTypes())
{
TypeBuilder tb = mb.DefineType(rt.Name, TypeAttributes.Public);
foreach (Reference r in GetReferences(rt.ID))
{
string name = NameFix(r.Name);
FieldBuilder fb = tb.DefineField(name, typeof(ReferenceObject), FieldAttributes.Static | FieldAttributes.Public | FieldAttributes.Literal);
//Call constructor here... how???
}
types.Add(tb.CreateType());
}
ab.Save(aName.Name + ".dll");
【问题讨论】:
-
也许我想在这里将它们切换到 DefineMethod 或 DefineProperty...但最终结果是我希望 ("120" == countries.USA) 以及 (Countries. USA == 120) 在我的代码中引用时为真。
-
ReferenceObject 基本上是一个 int 的包装器,允许将其与 int 或字符串进行比较。
标签: c# .net reflection dll dynamic