Tôi đang làm điều này chính xác, nhưng bạn cần phải thực hiện một số loại tạo mã để điều này hoạt động.
Trong giải pháp của mình, tôi đã thêm một dự án "EnumeratedTypes". Đây là một ứng dụng console lấy tất cả các giá trị từ cơ sở dữ liệu và xây dựng các enums từ chúng. Sau đó, nó lưu tất cả các enum vào một assembly.
Mã tạo enum như sau:
// 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");
Các dự án khác của tôi trong giải pháp tham khảo lắp ráp được tạo này. Kết quả là, sau đó tôi có thể sử dụng các enums động trong mã, hoàn chỉnh với intellisense.
Sau đó, tôi đã thêm một sự kiện hậu xây dựng để sau khi dự án "EnumeratedTypes" này được tạo, nó tự chạy và tạo tệp "MyEnums.dll".
Nhân tiện, nó sẽ giúp thay đổi thứ tự xây dựng của dự án của bạn để "EnumeratedTypes" được tạo trước. Nếu không, khi bạn bắt đầu sử dụng .dll được tạo động của mình, bạn sẽ không thể tạo bản dựng nếu .dll bị xóa. (Con gà và quả trứng là vấn đề - các dự án khác của bạn trong giải pháp cần .dll này để xây dựng đúng cách và bạn không thể tạo .dll cho đến khi bạn xây dựng giải pháp của mình ...)
Tôi nhận được hầu hết các mã ở trên từ bài viết msdn này .
Hi vọng điêu nay co ich!