Je fais exactement cette chose, mais vous devez faire une sorte de génération de code pour que cela fonctionne.
Dans ma solution, j'ai ajouté un projet "EnumeratedTypes". Il s'agit d'une application console qui récupère toutes les valeurs de la base de données et en construit les énumérations. Ensuite, il enregistre toutes les énumérations dans un assemblage.
Le code de génération enum est comme ceci:
// 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");
Mes autres projets dans la solution font référence à cet assembly généré. En conséquence, je peux ensuite utiliser les énumérations dynamiques dans le code, avec intellisense.
Ensuite, j'ai ajouté un événement post-build pour qu'après la construction de ce projet "EnumeratedTypes", il s'exécute et génère le fichier "MyEnums.dll".
En passant, cela permet de modifier l' ordre de génération de votre projet afin que "EnumeratedTypes" soit généré en premier. Sinon, une fois que vous commencez à utiliser votre .dll généré dynamiquement, vous ne pourrez pas faire de compilation si le .dll est supprimé. (Type de problème de poulet et d'oeuf - vos autres projets dans la solution ont besoin de ce .dll pour se construire correctement, et vous ne pouvez pas créer le .dll tant que vous n'avez pas créé votre solution ...)
J'ai obtenu la plupart du code ci-dessus de cet article msdn .
J'espère que cela t'aides!