Note that there are some explanatory texts on larger screens.

plurals
  1. POC# Reflection: How do I initialize a field created dynamically in TypeBuilder?
    primarykey
    data
    text
    <p>I'm creating a dynamic dll to hold custom objects created from my database. I can create the field the way I want, however I don't understand how to call the constructor. For a final generated result, I want:</p> <pre><code>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 } </code></pre> <p>what I'm getting is</p> <pre><code>public class Countries { public Countries() { } public static readonly ReferenceObject USA; public static readonly ReferenceObject CAN; public static readonly ReferenceObject MEX; ... } </code></pre> <p>How do I set the values to new initialized objects?</p> <pre><code>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"); </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload