Я создаю динамическую 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");