Dalam aplikasi .Net, kita sering melihat bahwa proyek proyek yang dihasilkan oleh VS untuk kita akan berisi file seperti App.config atau Web.config. File inilah yang kami sebut file konfigurasi aplikasi. File ini menjelaskan beberapa informasi terkait aplikasi kita, seperti koneksi database, mode otentikasi, dll. Dalam program ini, kita dapat menggunakan properti ConnectionStrings dari ConfigurationManager untuk mendapatkan informasi string koneksi database dengan mudah di file konfigurasi.
Namun terkadang, kita perlu memperluasnya dan menambahkan beberapa elemen khusus daripada hanya menggunakan konfigurasi default. Misalnya, kita mungkin perlu memuat kelas secara dinamis dan menginisialisasinya ketika program dimulai, tetapi data kelas atau inisialisasi ini tidak kita ketahui selama perancangan program. Saya yakin semua orang pernah mengalami masalah seperti itu, jadi saya tidak akan menjelaskannya terlalu banyak di sini. Cara terbaik adalah dengan menulis hal-hal ini yang mungkin berubah ke dalam file konfigurasi. Jika Anda yakin, Anda hanya perlu memodifikasi file konfigurasi, daripada membutuhkan waktu 30 detik untuk membuka VS saat produk akan online kodenya.
Menambahkan beberapa elemen khusus ke file konfigurasi itu mudah dan hanya membutuhkan dua langkah:
1. Daftarkan nama node yang ingin Anda tentukan dan pengendali bagian konfigurasi yang digunakan untuk memproses node di node <configSections>. Kodenya adalah sebagai berikut:
1 <configSections>2 <bagian name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. Tambahkan node khusus di lokasi yang sesuai. Kodenya adalah sebagai berikut:
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <default factory="sql"></default> 6 <pabrik> 7 <tambahkan nama="sql" assembly="Halo.Data" class="SqlDbFactory" /> 8 <tambahkan nama="Oracle" assembly="Halo.Data" class="OracleDbFactory" /> 9 </ pabrik>10 </dbFactory>
Node khusus telah ditambahkan, tetapi bagaimana kita mendapatkan informasi konfigurasi ini dalam program? Saya yakin banyak dari Anda ahli dalam bermain dengan XML. Jika Anda menggunakan beberapa kelas di bawah System. Memang benar demikian. Sang master memang seorang master. Saya sangat mengaguminya. Namun jika diterapkan seperti ini, sebenarnya saya tidak perlu menulis postingan blog ini.
Kerangka .Net mengimplementasikan banyak API konfigurasi untuk menyederhanakan operasi kami pada file konfigurasi. Pada langkah pertama, kami menyebutkan pengendali bagian konfigurasi, yang digunakan untuk membaca dan menulis informasi node khusus kami. Jadi bagaimana kita mengimplementasikan pengendali bagian konfigurasi? Pertama, mari kita lihat kelas dan konsep terkait.
ConfigurationSection: Node khusus harus mewarisi kelas ini untuk menyediakan pemrosesan khusus dan akses terprogram ke bagian konfigurasi khusus.
ConfigurationElement: Ini mewakili elemen dalam file konfigurasi.
ConfigurationElementCollection: Ini mewakili elemen konfigurasi yang berisi kumpulan elemen anak.
Dengan kelas-kelas ini, kita dapat meringkas bahwa ada dua jenis elemen konfigurasi dalam file konfigurasi.
Pertama, elemen konfigurasi tunggal adalah elemen yang mewarisi ConfigurationElement dan tidak berisi elemen turunan apa pun.
Kedua, elemen konfigurasi koleksi adalah elemen yang diwarisi dari ConfigurationElementCollection, yang berisi kumpulan elemen turunan.
Konsep seringkali relatif abstrak. Untuk memahami hal-hal tersebut, kita harus menjelaskannya secara rinci berdasarkan contoh yang kami berikan di atas.
Terdapat dua elemen pada bagian konfigurasi <dbFactory> yaitu <default> dan <factorys>, dan elemen <factorys> berisi dua sub elemen. Jadi di sini <default> adalah elemen konfigurasi tunggal, dan <factorys> merupakan elemen konfigurasi kumpulan. Kita perlu mengimplementasikan kelas-kelas dan propertinya yang sesuai dengan elemen-elemen ini.
Elemen <default>: Ini adalah elemen tipe tunggal, jadi kita mewarisi ConfigurationElement. Ada atribut pabrik di elemen ini, jadi kami mendefinisikannya sesuai di kelas. Kodenya adalah sebagai berikut:
kode
kelas publik DefaultElement: ConfigurationElement { [ConfigurationProperty("pabrik")] string publik Pabrik { dapatkan { kembalikan ini["pabrik"] sebagai string } set { ini["pabrik"] = nilai;
Catatan: Kita perlu mendaftarkan atribut ConfigurationProperty dari properti di atas definisi properti.
<pabrik> elemen anak:
kode
public class FactoryElement : ConfigurationElement { [ConfigurationProperty( "nama" )] string publik Nama { dapatkan { kembalikan ini["nama"] sebagai string } set { ini["nama"] = nilai; )] string publik Majelis { dapatkan { kembalikan ini["perakitan"] sebagai string; } set { ini["perakitan"] = nilai; } [ConfigurationProperty("kelas")] string publik Kelas { dapatkan { kembalikan ini[" kelas"] sebagai string; } set { ini["kelas"] = nilai; } } }
Elemen <factorys> adalah elemen koleksi dan mewarisi ConfigurationElementCollection.
kode
kelas publik FactoryElements : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new FactoryElement(); } objek override yang dilindungi GetElementKey( ConfigurationElement element ) { return ((FactoryElement)element).Name; kembalikan BaseGet( nama ) sebagai FactoryElement;
Kelas ConfigurationElementCollection adalah kelas abstrak, dan Anda harus mengimplementasikan metode CreateNewElement dan metode GetElementKey secara eksplisit.
Node <dbFactory>, diwarisi dari ConfigurationSection
kode
public class DbFactorySection : ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { dapatkan { kembalikan ini["default"] sebagai DefaultElement } set { ini["default"] = nilai; )] public FactoryElements Factorys { dapatkan { kembalikan ini["pabrik"] sebagai FactoryElements; } set { ini["pabrik"] = nilai;
Pengendali bagian konfigurasi akhirnya selesai. Tempatkan keempat kelas ini dalam direktori proyek yang sama dan kompilasi ke dalam DLL. Jika Anda perlu mendapatkan informasi konfigurasi, rujuk DLL ini dan gunakan DbFactorySection section = ConfigurationManager.GetSection( "dbFactory" ) sebagai DbFactorySection;