Sözlük

5 Mayıs 2015 Salı

Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak

Asp.NET projelerimizin olmazsa olmazı -ki olmazsa uygulama çalışmaz :)- web.config dosyamızda <appSettings> düğümü içerisinde uygulamada kullanmak üzere bir çok anahtar tanımlarız. Bunları tıpkı bir class içindeki property’ler gibi etkin kullanabilmek adına kendi projelerimde kullanmak için bir pratik bir yöntem geliştirdim ve paylaşmak istedim. Adım adım nasıl yapılacağını görelim:
Yeni bir “Asp.NET Web Site” oluşturuyoruz. Projemizi bir kez F5 ile Debug ediyoruz ki web.configdosyamdaki girdiler VWD ya da VS tarafından güncellensin. Öncelikle aşağıdaki ekran görüntüsünde de görüldüğü üzere sitemize uygulama ayarları için web.config‘den bağımsız olarak farklı bir “Web Configuration File” dosyası oluşturup ekliyoruz. Bu dosyaya ben “appSettings.config” adını veriyorum ve “App_Data” klasörüne kaydediyorum. Bu klasöre kaydetmek zorunlu değil. Ancak hostta bu klasör varsayılan olarak yazma iznine sahip olduğu için host’a yüklediğimde tekrar yazma izinleri ile uğraşmak zorunda kalmayacağım için tercihimi bu yönde kullandım.
app.Settings.config dosyasını oluşturma
Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak
Yukarıdaki resimde sağ tarafta oluşturduğumuz yeni konfigrasyon dosyasının içeriği görünmekte. Burada en üstteki <?xml version="1.0"?> satırı hariç diğer satırları silip onun yerine aşağıdaki gibi<appSettings></appSettings> düğümünü ekliyoruz. Ayarlarımızı bu düğümler içerisine yazacağız. Örnek olarak aşağıdaki resimde de görüldüğü gibi iki adet anahtarımız var.
Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak
Şimdi web.config dosyamızda yeni oluşturduğumuz bu dosyanın yolunu <configuration>düğümünün hemen altında aşağıdaki biçimde tanımlıyoruz:

Şimdi projemize bir “App_Code” klasörü ekleyip uygulamamız içinden bu değerlere pratik bir biçimde erişebileceğimiz, güncelleyebileceğimiz class’larımızı yazmaya başlayabiliriz. İlk class’ımızbizim ayarları güncelleyebileceğimiz metodumuzu barındıran SettingsBase isimli class’ımız olacak. Bu class’ı SettingsBase.cs isimli dosya adı ile oluşturuyoruz.
Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak

SettingBase.cs dosyası içeriği:

Buradaki SaveSetting metodunu bilinçli olarak static tanımladım. Böylece class’ın yeni bir instance’ını oluşturmak zorunda kalmadan değeri set edebiliriz. Ayrıca appSettings.configdosyanızı App_Data dışında bir klasöre kaydettiyseniz, metot içindeki string baseDir = System.Web.HttpContext.Current.Server.MapPath(“~/App_Data/”); satırını da ona göre değiştirmelisiniz.
Şimdi ise Settings isimli ayarlarımızın property’lerinin bulunacağı class’ımızı Settings.cs dosya adıyla oluşturacağız. Ve class’ı da SettingsBase isimli class’ımızdan türeteceğiz ki oradakiSaveSetting metodunu kullanabilelim.
Setting.cs dosyası içeriği:
Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak
Artık ayarlarımızı class’ımız üzerinden get/set edebiliriz. Örnek olarak sitemizin ana sayfasının browser başlığını bu class içindeki property’den alalım. Bunun için Page_Load event’i içinde aşağıdaki kodu yazmamız yeterli olacaktır:

Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak
Sonuç olarak aşağıda görüldüğü gibi browser’ımızın başlığı bizim appSettings.config içinde tanımladığımız değer oldu. Aynı şekilde asp.net sayfamız içindeki bir kontrole ya da kodumuz içindeki herhangi bir string değişkene de atayabiliriz.
Bir de tanımladığımız bir değeri değiştirmeyi deneyelim. Mesela browser başlığını değiştirelim. Bunun için aşağıdaki kod bloğunu çalıştıralım:

İşte appSettings.config içindeki “SiteTitle” anahtarımızın değeri:
Web.config İle Uygulama Ayarlarını Class Üzerinden Daha Etkin Kullanmak
Görüldüğü gibi Settings class’ımızdaki property üzerinden hem get hem de set işlemini pratik bir biçimde yapabiliyoruz. Siz kendi projelerinizdeki ihtiyaçlara göre bu class’ı geliştirebilirsiniz. Mesela Int32 türünde değer alan property’ler için set bloğunda bir TryParse denetimi ile tam sayı (integer) olmayan değerlerin kaydedilmesini engelleyebilirsiniz.

Kaynak

Hiç yorum yok:

Yorum Gönder