Ich mache genau das, aber Sie müssen eine Art Codegenerierung durchführen, damit dies funktioniert.
In meiner Lösung habe ich ein Projekt "EnumeratedTypes" hinzugefügt. Dies ist eine Konsolenanwendung, die alle Werte aus der Datenbank abruft und die Aufzählungen daraus erstellt. Anschließend werden alle Aufzählungen in einer Assembly gespeichert.
Der Enum-Generierungscode lautet wie folgt:
// Get the current application domain for the current thread
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name,
AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "MyEnums" assembly.
// For a single-module assembly, the module has the same name as the assembly.
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name,
name.Name + ".dll");
// Define a public enumeration with the name "MyEnum" and an underlying type of Integer.
EnumBuilder myEnum = moduleBuilder.DefineEnum("EnumeratedTypes.MyEnum",
TypeAttributes.Public, typeof(int));
// Get data from database
MyDataAdapter someAdapter = new MyDataAdapter();
MyDataSet.MyDataTable myData = myDataAdapter.GetMyData();
foreach (MyDataSet.MyDataRow row in myData.Rows)
{
myEnum.DefineLiteral(row.Name, row.Key);
}
// Create the enum
myEnum.CreateType();
// Finally, save the assembly
assemblyBuilder.Save(name.Name + ".dll");
Meine anderen Projekte in der Lösung verweisen auf diese generierte Baugruppe. Infolgedessen kann ich dann die dynamischen Aufzählungen im Code zusammen mit Intellisense verwenden.
Dann habe ich ein Post-Build-Ereignis hinzugefügt, damit dieses "EnumeratedTypes" -Projekt nach dem Erstellen selbst ausgeführt wird und die Datei "MyEnums.dll" generiert.
Übrigens ist es hilfreich, die Erstellungsreihenfolge Ihres Projekts so zu ändern , dass zuerst "EnumeratedTypes" erstellt wird. Andernfalls können Sie, sobald Sie Ihre dynamisch generierte DLL verwenden, keinen Build mehr erstellen, wenn die DLL jemals gelöscht wird. (Henne-Ei-Problem - Ihre anderen Projekte in der Lösung benötigen diese DLL, um ordnungsgemäß zu erstellen, und Sie können die DLL erst erstellen, wenn Sie Ihre Lösung erstellt haben ...)
Ich habe den größten Teil des obigen Codes aus diesem MSDN-Artikel erhalten .
Hoffe das hilft!