C dinamik numaralama#
Nasıl dinamik bir numaralama (ve daha sonra numaralama seçenekleri kullanın) oluşturun C muyum# veritabanı bir arama tablosu değerleri (kurumsal kütüphane veri katmanı kullanarak) dayalı?
Eğer veritabanında yeni bir arama değeri eklerseniz, örneğin, kod fazladan statik isimli değer beyanı eklemek zorunda istemiyorum.
Böyle bir şey var mı? Bir kod statik numaralama (The Code Project Madde başı olarak . oluşturulan yaratmak istemiyorum ^em>Enum Code Generator - Generating enum code automatically from database look up tablesve tamamen dinamik olmayı tercih ederim.
CEVAP
Bu kesin bir şey, ama yapıyorumgerekbu iş için kod oluşturma için bir tür yapmak.
Benim çözüm, bir proje ekledim"". EnumeratedTypes Bu veritabanından değerleri alır ve onlardan çeteleler inşa eden bir konsol uygulaması. Derleme için çeteleler tüm onu kaydeder.
Numaralama nesil kod şöyle:
// 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");
Çözüm oluşturulan bu derleme başvurusu benim diğer projeler. Sonuç olarak, kod içinde dinamik çeteleler, ıntellisense ile tam kullanabilirim.
Sonra, bir post-build bu" proje yerleşik, kendi kendine dönüyor ve "" dosya. myenums.dll oluşturur "EnumeratedTypes ondan sonra olay ekledim
Bu arada, değiştirmek için yardımcı olurdüzen oluşturunprojeniz çok "EnumeratedTypes". ilk yerleşik olan Kullanmaya başladığınızda aksi takdirde, dinamik olarak oluşturulmuş .dll, bir yapı yapmak mümkün olmayacaktır .dll şimdiye kadar silinir. (Çözüm ve sorun biraz tavuk yumurta ... diğer projelerinizde bu lazım .dll DOSYASı düzgün kurmak ve oluşturmak mümkün değil .çözümünüz...) inşa edinceye kadar dll
this msdn article yukarıdaki kodu çoğunu aldım.
Bu yardımcı olur umarım!
Böl ve Algo ve Dinamik Programlama ara...
C# 4 &; dinamik" ifade ağaçları"...
Erişim Numaralama değeri EL kullanarak...
Dinamik programlama ve memoization: aş...
Nasıl JavaScript ile dinamik olarak CS...