7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. ASP.NET

Cara Menambahkan Custom Configuration Settings untuk (ASP) Aplikasi .NET

Scroll to top
Read Time: 12 mins

Indonesian (Bahasa Indonesia) translation by Suci Rohini (you can also view the original English article)

Sejak dirilis, aplikasi dan komponen ASP.NET telah melihat ke file web.config untuk memuat pengaturan apa pun yang mereka perlukan untuk berfungsi. Namun, menambahkan pengaturan khusus untuk menambah fleksibilitas dan ketahanan pada aplikasi atau komponen tidak semudah yang diinginkan kebanyakan orang. Artikel ini mengajarkan Anda cara menulis kelas yang diperlukan untuk menangani elemen konfigurasi XML dan menggunakan pengaturan yang ada di dalam kode Anda.

Tutorial yang Diterbitkan Ulang

Setiap beberapa minggu, kita mengunjungi kembali beberapa posting favorit pembaca dari sepanjang sejarah situs. Tutorial ini pertama kali diterbitkan pada November 2012.

.NET Framework menyediakan berbagai pengaturan yang dapat dikonfigurasi dalam web.config untuk mengubah perilaku satu atau lebih komponen bawaan dalam aplikasi. Untuk beberapa pengembang, tetap dengan pengaturan yang disediakan oleh .NET Framework sudah cukup. Tetapi lebih banyak pengembang menemukan mereka perlu mengontrol koleksi pengaturan yang lebih luas - baik untuk komponen (ditulis sendiri atau pihak ketiga), atau hanya serangkaian nilai yang mereka temukan sendiri gunakan di seluruh aplikasi mereka.

File web.config memang memungkinkan Anda untuk mengatur pengaturan khusus dengan <appSettings/> elemen, tetapi tidak mengizinkan apa pun selain pasangan kunci/nilai sederhana. Elemen XML berikut adalah contoh pengaturan yang terdapat dalam <appSettings/> :

Pengaturan Kunci/Nilai tentu dapat membantu dalam banyak situasi, tetapi pengaturan tidak cukup fleksibel untuk komponen atau pengaturan yang kuat atau kompleks.

Untungnya, Microsoft memungkinkan pengembang untuk menulis kelas yang menambahkan akses terprogram ke pengaturan konfigurasi khusus yang terdapat dalam web.config.


Bagian Konfigurasi

Pengaturan dalam web.config dikategorikan ke dalam bagian konfigurasi. Sebagai contoh, pengaturan yang terkandung dalam bagian <system.web/> berkaitan dengan pengaturan ASP.NET untuk aplikasi Anda. Anda dapat mengubah skema otentikasi aplikasi Anda, serta menambah atau menghapus penangan HTTP untuk melakukan fungsi spesifik untuk jenis file tertentu. Bagian <system.webServer/> memungkinkan Anda untuk mengontrol banyak pengaturan IIS7 tanpa memiliki akses langsung ke IIS7.

Dibutuhkan bagian konfigurasi dari semua pengaturan yang tidak terkandung dalam elemen <appSettings/>. Jadi ide yang baik untuk merancang struktur XML pengaturan konfigurasi Anda sebelum menulis kode apa pun.

Konfigurasi yang digunakan sebagai contoh dalam tutorial ini adalah untuk komponen yang mengambil umpan RSS atau Atom. Itu tidak melakukan penguraian, karena itu berada di luar cakupan tutorial ini. Alih-alih menyandikan daftar feed untuk diambil, komponen melihat ke konfigurasinya untuk memuat nama dan URL feed yang akan diambil. Komponen ini disebut FeedRetriever, dan struktur XML yang diinginkan dari konfigurasinya terlihat seperti ini:

Elemen <feedRetriever/> didefinisikan oleh bagian konfigurasi. Sebagai aturan umum, bagian konfigurasi harus membagikan nama komponen yang dirancang untuknya. Anak elemen <feedRetriever/> saja adalah elemen <feeds/>. Pikirkan elemen ini sebagai kumpulan feed karena mengandung beberapa elemen <add/> (pikirkan metode Add() yang dimiliki sebagian besar objek koleksi). Pilihan menggunakan elemen bernama "add" mungkin tampak aneh pada awalnya, tetapi elemen <add/> digunakan di sebagian besar bagian konfigurasi bawaan. Jadi menggunakannya di sini cukup ikuti praktik desain yang diajukan oleh Microsoft.

Elemen <add/> ini menggunakan atribut nama, url, dan cache untuk menetapkan pengaturan tertentu untuk setiap umpan. Secara alami, atribut nama dan url diperlukan, tetapi atribut cache tidak, dan seharusnya default sebagai true.

Konfigurasi di atas sederhana. Elemen <feedrRetriever/> dapat dimodifikasi untuk mengandung anak lain, yang disebut <globalSettings/> , untuk berisi pengaturan yang akan berlaku untuk semua feed. Elemen <add/> juga bisa menggunakan atribut tambahan, seperti cacheTime dan requestFrequency, untuk mengontrol berapa lama feed di-cache dan seberapa sering diminta dari host jarak jauh. Satu-satunya batasan untuk ekstensibilitas dan konfigurasi adalah imajinasi Anda.


Menulis Handler Konfigurasi

Setelah mendesain struktur XML, langkah selanjutnya adalah menulis penangan konfigurasi untuk memproses pengaturan yang ditentukan dalam XML. Handler pada dasarnya adalah kelas yang mewarisi dari System.Configuration.ConfigurationSection, tetapi juga menggabungkan penggunaan kelas lain - seperti kelas yang berasal dari System.Configuration.ConfigurationElement dan System.Configuration.ConfigurationElementCollection.

Kelas-kelas berdasarkan ConfigurationElement mewakili elemen individual; ini adalah blok bangunan bagian konfigurasi. Jenis yang berasal dari ConfigurationElementCollection cukup mewakili elemen yang mengandung lebih dari satu jenis elemen. Dari konfigurasi yang tercantum di atas, elemen <feeds/> diwakili oleh kelas yang berasal dari ConfigurationElementCollection, dan elemen <add/> diwakili oleh kelas berbasis ConfigurationElement.


Mewakili Elemen <add/>

Anda akan mulai dengan elemen <add/> dengan mewakilinya dengan kelas yang disebut FeedElement (berasal dari ConfigurationElement). Kelas ini, dan kelas terkait konfigurasi di masa mendatang, berada di ruang nama FeedRetriever.Configuration.

Setiap objek ConfigurationElement berfungsi sebagai pengindeks untuk koleksi internal nilai properti. Koleksi internal ini, bersama dengan atribut .NET, yang memungkinkan Anda untuk memetakan atribut <add/> elemen ke properti dari kelas FeedElement.

Kode berikut adalah kode lengkap untuk kelas FeedElement:

Kelas ConfigurationElement berfungsi sebagai pengindeks ke kumpulan properti konfigurasi yang mendasarinya (karenanya notasi pengindeks dari [keyValue] ini). Dengan menggunakan kata kunci ini dan mengakses properti yang mendasarinya dengan kunci string, Anda bisa mendapatkan dan mengatur nilai properti tanpa perlu bidang pribadi untuk memuat data itu. Pengumpulan properti yang mendasari menyimpan data sebagai objek Jenis; oleh karena itu, Anda harus memberikan nilai sebagai tipe yang sesuai jika Anda ingin melakukan sesuatu dengannya.

Properti yang mewakili atribut XML didekorasi dengan atribut ConfigurationPropertyAttribute. Parameter pertama atribut ConfigurationPropertyAttribute adalah nama atribut XML yang ditemukan di dalam elemen <add/>. Mengikuti parameter pertama adalah satu set sejumlah parameter bernama. Daftar berikut adalah daftar lengkap dari parameter yang mungkin:

  • DefaultValue - Mendapat atau menetapkan nilai default untuk properti yang didekorasi. Parameter ini
    tidak diperlukan.
  • IsDefaultCollection - Mendapat atau menetapkan nilai Boolean yang menunjukkan apakah properti
    adalah koleksi properti default untuk properti yang didekorasi. Parameter ini adalah
    tidak diperlukan, dan standarnya salah.
  • IsKey - Mendapat atau menetapkan nilai Boolean yang menunjukkan apakah properti ini adalah properti utama
    untuk properti elemen yang didekorasi. Parameter ini tidak diperlukan, dan standarnya
    nilai palsu.
  • IsRequired - Mendapat atau menetapkan nilai Boolean yang menunjukkan apakah elemen yang didekorasi
    properti diperlukan. Parameter ini tidak diperlukan, dan nilai standarnya salah.

Nilai default "http://localhost" untuk properti Url bukan kesalahan .NET Framework. Juga memberi Anda kemampuan untuk menghias properti dengan atribut validator - seperti RegexStringValidatorAttribute yang mendekorasi properti Url. Validator ini mengambil nilai properti Url dan memvalidasinya terhadap ekspresi reguler yang disediakan untuk atribut; namun, ini juga memvalidasi properti Url sebelum berisi data dari elemen XML. Nilai default properti Url adalah string kosong ketika objek FeedElement pertama kali dibuat. String kosong tidak memvalidasi terhadap ekspresi reguler yang disediakan, sehingga validator melempar ArgumentException sebelum data apa pun diambil dari file XML.

Ada dua kemungkinan penyelesaian untuk masalah ini. Pendekatan pertama memodifikasi ekspresi reguler untuk memungkinkan string kosong. Pendekatan kedua memberikan nilai default ke properti. Tidak masalah dalam kasus khusus ini. Bahkan dengan nilai default, atribut url masih merupakan atribut yang diperlukan dalam elemen <add/> - aplikasi melempar ConfigurationErrorsException jika elemen <add/> tidak memiliki atribut url.

Ada beberapa atribut validator lain di System.Configuration namespace untuk memvalidasi data yang ditugaskan ke properti dan atribut XML yang dipetakan. Berikut ini daftar semua atribut validator di dalam namespace System.Configuration:

Dengan pengecualian CallbackValidatorAttribute, Anda tidak harus membuat objek validator terkait untuk digunakan bersama dengan atribut validator. .NET runtime membuat objek validator yang sesuai untuk Anda, dan atribut berisi parameter yang diperlukan untuk mengonfigurasi objek validator.

Sedikit kode ini adalah semua yang diperlukan untuk secara terprogram mewakili elemen <add/> individu . Langkah selanjutnya adalah menulis kelas yang mewakili elemen <feeds/>.


Menulis Kelas Koleksi Elemen

Representasi XML dari elemen <feeds/> adalah kumpulan elemen <feeds/>. Demikian juga, representasi terprogram dari elemen adalah kumpulan objek FeedElement. Kelas ini, disebut FeedElementCollection, berasal dari kelas ConfigurationElementCollection yang abstrak.

Kelas ConfigurationElementCollection berisi beberapa anggota, tetapi hanya dua yang ditandai sebagai abstrak. Dengan demikian, implementasi ConfigurationElementCollection paling sederhana memiliki dua metode:

  • CreateNewElement() - Membuat objek ConfigurationElement baru (FeedElement dalam ini
    case).
  • GetElementKey() - Mendapat kunci elemen untuk elemen konfigurasi yang ditentukan (the
    Beri nama properti objek FeedElement dalam kasus ini).

Dengan mengingat hal itu, lihat kode lengkap untuk kelas FeedElementCollection di bawah ini:

A ConfigurationCollectionAttribute menghiasi kelas koleksi ini. Parameter pertama untuk atribut adalah objek Type - jenis item koleksi berisi. Dalam hal ini, ini adalah jenis FeedElement. Setelah tipe parameter beberapa parameter bernama Anda dapat meneruskan ke atribut. Ini tercantum di bawah ini:

  • AddItemName - Menetapkan nama elemen <add/> konfigurasi. Sebagai contoh,
    mengatur ini sebagai "feed" akan membutuhkan elemen <add/> di
    konfigurasi diubah menjadi <feed/>.
  • ClearItemsName - Menetapkan nama elemen <clear/> konfigurasi (digunakan
    untuk menghapus semua item dari koleksi).
  • RemoveItemName - Menetapkan nama untuk elemen <remove/> konfigurasi (digunakan
    untuk menghapus item dari koleksi).

Meninggalkan ini bernama parameter kosong default mereka untuk <add/>, <clear/>, <remove/>.


Menulis Kelas FeedRetreiverSection

Kelas terakhir, disebut FeedRetrieverSection, berasal dari ConfigurationSection dan mewakili elemen <feedRetriever/>. Ini adalah kelas paling sederhana dari kelas konfigurasi, karena satu-satunya persyaratan yang harus dipenuhi adalah menyediakan akses terprogram ke elemen <feeds/> (FeedElementCollection).

Ini adalah salah satu properti, dari tipe FeedElementCollection dan disebut Feed, didekorasi dengan ConfigurationPropertyAttribute - memetakannya ke elemen <feeds/>.


Memodifikasi web.config

Dengan pengendali konfigurasi selesai, Anda dapat menambahkan elemen yang sesuai ke web.config. Bagian <feedRetriever/> dapat pergi ke mana saja dalam file selama itu adalah turunan langsung dari elemen root (elemen <configuration/>). Menempatkannya di dalam bagian konfigurasi lain menghasilkan kesalahan.

Langkah berikutnya adalah menambahkan anak <section/> turunan untuk <configSections/>. Elemen <section/> memiliki dua sifat-sifat menarik:

  • name - Nama elemen bagian konfigurasi. Dalam hal ini, nama adalah feedRetriever.
  • type - Nama kualifikasi kelas yang terkait dengan bagian, dan jika perlu,
    nama majelis tempat kelas berada. Dalam hal ini, nama yang memenuhi syarat
    adalah FeedRetriever.Configuration.FeedRetrieverSection. Jika berada di tempat yang terpisah
    perakitan, atribut type akan memiliki nilai "FeedRetriever.Configuration.FeedRetrieverSection,
    <assemblyName>", dimana <assemblyName> nama Majelis
    tanpa kurung kurawal.

Elemen <section/> berikut adalah apa yang Anda tambahkan ke file web.config, di bawah <configSections/>, ketika kelas konfigurasi tidak berada di rakitan terpisah (seperti halnya dalam unduhan kode):

Sekarang aplikasi Anda dikonfigurasikan dengan benar untuk menggunakan kelas FeedRetrieverSection, FeedElementCollection, dan FeedElement untuk memberi Anda akses terprogram ke pengaturan khusus yang terdapat <feedRetriever/> dalam bagian konfigurasi di web.config. Jadi, bagaimana Anda mengakses pengaturan ini dari dalam kode Anda?


Mengakses Data Konfigurasi dari Kode

System.Configuration namespace berisi kelas statis yang disebut ConfigurationManager. Jika Anda menggunakan <connectionStrings/> bagian untuk menyimpan string koneksi Anda, Anda setidaknya terbiasa dengan ConfigurationManager. Ini memiliki metode yang disebut GetSection(), yang menerima string yang berisi nama bagian konfigurasi untuk mengambil. Kode berikut menunjukkan ini (anggap menggunakan System.Configuration berada di bagian atas file kode):

Metode GetSection() mengembalikan nilai dari tipe Object, sehingga harus dilemparkan ke tipe apa pun yang ditangani oleh pawang untuk bagian itu. Kode ini mengambil bagian bernama feedRetriever dan melemparkan hasilnya sebagai FeedRetrieverSection. Setelah Anda memiliki objek, Anda dapat mulai mengakses data konfigurasi secara terprogram.

Untuk memberi Anda gambaran tentang bagaimana pengaturan konfigurasi dapat digunakan dalam komponen atau aplikasi Anda, kode berikut ini adalah implementasi yang sangat mendasar dari komponen FeedRetriever.

Pertama, variabel statis bernama _Config, bertipe FeedRetreiverSection, dideklarasikan dan diberi nilai dengan memanggil ConfigurationManager.GetSection(). Membuat variabel statis adalah pilihan desain. Dengan melakukannya, semua anggota kelas, baik instance atau statis, akan memiliki akses ke pengaturan konfigurasi tanpa harus membuat beberapa panggilan ke GetSection().

Setelah Anda mengambil penangan bagian dengan GetSection(), Anda memiliki akses lengkap ke objek yang dibuat dari kelas penangan Anda. Baris pertama GetFeeds() adalah untuk setiap loop yang loop melalui semua objek FeedElement yang terkandung dengan objek FeedElementCollection yang dikembalikan oleh properti Feeds. Ini memberi Anda akses langsung ke objek-objek FeedElement - membuatnya mudah untuk mengakses setiap nama, URL, dan pengaturan cache.

Selama setiap iterasi dari loop, metode membuat permintaan menggunakan properti Url objek FeedElement. Jika permintaan menghasilkan sukses, data umpan diambil dan disimpan dalam variabel feedData. Kemudian kode memeriksa properti Cache objek FeedElement untuk menentukan apakah perlu cache feed atau tidak. Caching feed melibatkan pembuatan nama file dengan menggunakan properti Nama objek FeedElement dan tanggal dan waktu saat ini. Kemudian objek StreamWriter membuat file dan menulis data umpan ke sana.

Seperti yang Anda lihat, menggunakan kelas penangan bagian konfigurasi adalah kunci untuk mengambil dan menggunakan pengaturan khusus yang berada di web.config. Tentunya membutuhkan lebih banyak waktu dan upaya dari Anda, tetapi itu pasti membuat aplikasi atau komponen Anda jauh lebih mudah untuk dikonfigurasikan untuk Anda dan pengembang lainnya.


Jual Komponen .NET Anda di CodeCanyon Anda!


CodeCanyon

Tahukah Anda bahwa tahu kami memiliki kategori .NET di CodeCanyon. Jika Anda seorang pengembang .NET yang ahli, mengapa tidak menjual skrip/komponen/kontrol Anda sebagai penulis, dan dapatkan 40-70% dari setiap penjualan?

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.