Basit olarak isim-değer ikililerini web.config içinde <appSettings/> içinde
tutabiliyoruz fakat ya daha komplike konfigürasyon senaryolarını kullanmak istediğimizde
ne kullanmalıyız. Mesela bir nesneye ait çok fazla sayıda parametreyi tutmamız ya
da bir olaylar listesini tutmamız gerektiğinde ne olacak?Böyle durumlar için <appSettings/>
ihtiyaçlarımızı karşılamayacaktır. Bu durumda da daha komplike verileri tutarken
özel konfigürasyon ayarları tanımlamamız gerekmektedir.
web.config dosyasındaki herbir configuration section, kendisine ait olan veriyi
okuyacak ve beraberinde bir nesne döndürecek bir configuration section handler a
sahiptir. Bu configuration section lar ve onların handler ları <configSection>
tag ları arasında tanımlanmalıdır.
Örnekte machine.config dosyasında tanımlanmış <appSettings> görebilirsiniz.
<section> elementinde
name parametresi konfigürasyon
dosyasında kullanılacak görünür ismi tanımlamak için kullanılır, type parametresinde
ise veriyi okuyup nesne olarak döndürecek olan configuration section handler tanımlanır.
web.config dosyasında tanımlı olan tüm section lar,
web.config dosyasının miras aldığı machine.config dosyasında tanımlanmıştır.
Bize özel configuration section oluştururken neler
yapmalıyız?
- Konfigürasyon bilgilerinizi tutacağınız bir data yapısı tanımlamalısınız.
- Veriyi okuyup onu yukarda tanımlanan data yapısı olarak geri döndürecek,
IConfigurationSectionHandler in uygulandığı bir class oluşturun.
- web.config dosyanızda <configSection> tanımlayın. Burada yeni ayarlarınız
için kullanacağınız ad ve yukarda oluşturulan handler ı tanımlayın.(<section
name="" type="")
- Konfigürasyon ayarlarınızı yeni oluşturduğunuz section da tanımlayın.
- ConfigurationManager sınıfının GetSection metoduna
tanımladığınız section ın adını parametre olarak verip, tanımladığınız handler vasıtası
ile konfigürasyon ayarlarınızı gene tanımladığınız data yapısı formatında geri döndürün.
Basit olarak genel kullanımın uygulandığı bir örnek yapalım;örneğimizde
uygulamalarımız içinde kullanacağımız smile icon larının tanımlandığı
özel bir section oluşturalım.

web.config dosyasında kullanmak istediğimiz format bu şekilde. Icon ların imageUrl
ile tutuldukları yolu, key ile de uygulama içinde bu icon lar yerine kullanacağımız
anahtar kelime tanımlanmaktadır.
İlk olarak bu veriyi tutacak bir yapı oluşturalım
SmilesItem basit, iki tane public özelliğe sahip bir sınıf. ImageUrl resim yolunu,
Key ise icon için belirlenen anahtar kelimeyi tutar. Şimdi bize birden fazla SmilesItem
nesnesini tutmak için bir koleksiyon gereklidir.
SmilesItemCollection sınıfına ICollection<> interface ini uyguluyoruz. GetSmile()
fonksiyonu ile koleksiyon da verilen anahtar kelime ile uyuşan icon olup olmadığına
bakıyoruz eğer varsa eşleşen nesne geri döndürülüyor ve de default bir property
tanımlıyoruz GetSmile den dönen veriyi tutmak için.
Sıra, konfigürasyon dosyasından veriyi okuyup nesne olarak döndürecek sınıfa geldi.
SmilesConfigurationHandler sınıfında dikkat edilmesi gereken husus IConfigurationSectionHandler
interface inin uygulanmasıdır. Interface uygulandıktan sonra burada tanımlı olan
tek fonksiyon olan Create metodu ile özel tanımlanan ayarların tutulduğu SmilesItemCollection
sınıfı döndürülür.
XmlNodeList smileNodes = section.SelectNodes("smile"); XmlNode
nesnesinin SelectNodes methodu parametre olarak Xpath sorgusu kabul etmektedir ve
bunun sonucunda da eşleşen node lara XmlNodeList olarak geri döndürmektedir. Bu
tanımlamadan sonra alınan herbir node da belirtilen özelliklerin okunup bunları
yeni bir SmilesItem nesnesi haline dönüştürmektir.
smile.Attributes.GetNamedItem("imageUrl").Value.ToString()
Bütün bu işlemlerden sonra projeyi derleyip oluışan .dll dosyasını kullanmak
istediğimiz web uygulamasına referans olarak ekleyelim. İlk önce web.config dosyamız
bu özel section ın tanımlamasını yapmalıyız.
eğer web.config dosyalarınızda <configSection>
kullanacaksanız bunun mutlaka <configuration> section ınında
tanımlanmış olan ilke özellik olmasına compilation error almamak için dikkat edin.
name="görümesi istenen section adı" type="NameSpace.Type, Assembly"
Sırada bu oluşturulan ayarlara uygulama içinden erişime geldi. Bunun için diğer
web.config ayarlarınada ulaşabileceğim ve bana kolaylık sağlayacak bir class tanımlayacağım.
tanımlanan ConfigurationManager classının GetSection methodu ile tanımladığımız
custom section içeriği alınıyor ve SmilesItemCollection olarak geri döndürülüyor.
Uygulama içinde;
SmilesItem item=Config.Smiles["anahtarKelime"]; verilen anahtar
kelime ile eğer eşleşen bir icon varsa nesne olarak döndürülüyor.
ve icon resminide
item.ImageUrl.ToString() ile alabiliyoruz.