Je suis en train de faire cette chose exacte, mais vous avez besoin de faire une sorte de génération de code pour que cela fonctionne.
Dans ma solution, j'ai ajouté un projet "EnumeratedTypes". C'est une application console qui récupère toutes les valeurs de la base de données et construit les énumérations d'eux. Puis il enregistre toutes les énumérations à une assemblée.
L'enum de génération de code 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 de référence ce assembleur généré. En conséquence, je peux alors utiliser la dynamique des énumérations dans le code, complet avec intellisense.
Ensuite, j'ai ajouté un post-événement de construction, de sorte qu'après cette "EnumeratedTypes" le projet est construit, il va lui-même et génère le "MyEnums.dll" fichier.
Par ailleurs, il permet de changer l' ordre de construction de votre projet, afin que "EnumeratedTypes" est construit en premier. Sinon, une fois que vous commencez à utiliser votre générés dynamiquement .dll, vous ne serez pas en mesure de faire un build si l' .dll n'est jamais supprimé. (L'oeuf et la poule genre de problème, vos autres projets de la solution .dll pour construire correctement, et vous ne pouvez pas créer les .dll jusqu'à ce que vous construisez votre solution...)
J'ai obtenu la plupart de code ci-dessus à partir de cet article msdn.
Espérons que cette aide!