Erdinç Yaşan

Dotnet Configuration

Herkese selamlar, .net ile kodlama yaparken özellikle asp.net içerisinde programımızda kullanacağımız değerleri direkt olarak kod içerisinde yazmak sağlıklı olmayabilir.

Örneğin aşağıda bir kod parçası mevcut ve bu kod parçasının içeriğinde bağlantı dizemiz oluyor

Buradaki bağlantı dizesini kodun içerisinde çift tırnak ile belirtmeye Hard Code deniyor yani sonradan değiştirilemez tarzında bir ifade gibi düşünebilirsiniz. Siz c# projenizi publish ettikten sonra bu ayarı değiştiremezsiniz.

Hem buradaki kodları daha temiz hale getirebilmek hem de buradaki bağlantı dizesi örneğindeki gibi değiştirilebilir şeyler bir json dosyası içerisinde saklamayı tavsiye ediyor microsoft.

Ve bu json dosyasının asp.net için özel bir ismi var appsettings.json, fakat bunu kullanabilmenin tek yolu asp.net ile çalışmak değil.

Öncelikle bir c# console uygulamasında bunu nasıl kullanabiliriz onu görelim ki işin temelinde neler var bir bakalım ve öğrenelim.

En temelinden

Komutunu çalıştırarak yeni bir uygulama oluşturalım, sonrasında ise ister nuget package manager isterseniz de dotnet cli kullanarak , Configuration paketini kurmamız gerekiyor.

Ben dotnet cli kullanacağım ve projemin bulunduğu konuma giderek

Komutunu çalıştırıyoruz

Bu komut ile yüklenen paket içerisinde ConfigurationBuilder adlı bir class mevcut ve bu class ile bir IConfigurationRoot build edebiliyoruz.

Önce configuration builder classımızı oluşturalım.

Buradaki ConfigurationBuilder sınıfını kullanabilmemiz için using ifadesini eklememiz gerektiğini unutmayalım lütfen!

Adından da anlaşılabileceği üzere bu bir builder class ve build edebilmemizi sağlıyor ancak biz bunu build etmeden önce, bir appsettings dosyası oluşturalım.

Projemizin csproj dosyası ile aynı konumda olmalı ona dikkat edelim.

Daha sonrasında ise builder’ımıza burada eklemiş olduğumuz appsettings.json dosyasını ekleyelim.

Fakat configurationBuilder’ın içerisine baktığımızda add methodu altında bizden bir configuration source istiyor

O yüzden direkt olarak bir json dosyasını ekleyemiyoruz, bundan dolayı bir paket daha kurmamız lazım.

hemen terminalimizde

Yazıyoruz ve Json dosyalarımızı ekleyebilir hale geliyoruz daha sonrasında ise şu işlemi yaparak oluşturduğumuz appsettings.json dosyasını configuration builder’a ekliyoruz.

Yukarıdaki gibi bir hata aldıysanız korkmayın bunun sebebi appsettings.json dosyasını, projenin build edildiği yerde aramaktadır peki bizim build edilen dosyamızın çıktısı neresi?

Fakat bizim appsettings.json dosyamızın bulunduğu konum neresi?

Gördüğünüz gibi appsettings.json dosyamız projemizin build edilmemiş kodlarının bulunduğu yerde, bizim bunu bir şekilde bin debug net8.0’In altına taşımamız lazım , ancak bir programcı bunu elle taşır mı ? Tabiki de taşımaz zaten ihtiyacımız da yok.

Dosyanın otomatik olarak projenin build edildiği yere kopyalanması için ConfigurationApplication.csproj dosyamızı biraz düzenlememiz gerekiyor.

Burada None Include olan kısımı yeni ekledim diğer kısım zaten eklediğimiz paketleri belirtiyor. Ayrıca diğer paketlerin bulunduğu kısımla karışmaması adına farklı bir ItemGroup oluşturdum ve buraya ekledim, şimdi gelin burada ne nedir ona bakalım.
Burada none olarak belirttiğim xml etiketi aslında bunun önemli bir şey olmadığını belirtiyor c#’daki anonymous type’lar gibi düşünebilirsiniz. Include içerisinde ise hangi dosyalar’ı include edeceğini belirtiyoruz bunun altında verdiğimiz CopyToOutputDirectory ise projenin build/publish işlemlerinden sonra dosyayı hangi koşullarda kopyalanacağını belirtiyoruz. Burada ben PreserveNewest dedim bu da eğer daha önce build edildikten sonra bin/debug/net8.0 içerisinde oluşturulan appsettings.json dosyasını şimdikinden farklı ise kopyala değilse kopyalama demek. Burada şu işlemleri yapabiliyoruz.

tahmin edebileceğiniz gibi never asla yani hiçbir zaman kopyalamaz, always her zaman kopyasını oluşturur ve eski dosyayı siler diğer seçenek ise bizim kullandığımız zaten.

Şimdi gelelim uğraştığımız asıl işe…

appsettings.json dosyası uzantısından da anlayabileceğimiz üzere bir json dosyası ve içeriğinin json olması gerekiyor, hemen içerisine bir key value pair ekleyelim!

Benim eklediğim Key value pairler yukarıdaki şekilde şimdi de kodumuz üzerinde bu key value pair’lere ulaşmaya çalışalım.

Eğer yukarıdaki kodu kopyalayıp yapıştırırsanız çıktıda appsettings içerisinde Name ve Value olarak verdiğiniz değerlerin karşılıklarını görürsünüz yani configuration içerisine eklediğimi değerleri bu şekilde çekebiliyoruz.

Şimdi gelelim bağlantı dizelerine, Microsoft Configuration’ının connection stringler için ayırdığı özel bir alan mevcut. Eğer siz bir connection string belirtmek isterseniz bunu şu şekilde yapmalısınız.

appsettings.json dosyamı yukarıdaki gibi güncelledikten sonra connection string’imi artık şu şekilde getirebilirim

Eski kodları silmeden en sona bağlantı dizesinin nasıl çekilebileceğini ekledim.

Ayrıca appsettings dosyamız bir json olduğu için içerisinden bir classdeğerlerimizi çekebiliriz!

Örnek olması adına aşağıdaki gibi bir örnek class oluşturdum bu class tamamen örnektir

buradaki sınıfın aynısını appsettings.json dosyamızda json yapısıyla oluşturalım

appsettings dosyasının son hali

Buradaki Appsettings değeri herhangi bir şey olabilir önemli olan sınıfın içerisindeki property’lerinin nameleri aynı olmalı örneğin MyValue

Ayrıca bir sınıfı appsettinsden alabilmek için bir paket daha kurmamız gerekli

Yukarıdaki komutu çalıştırarak paket kurulumumuzu yapalım

Paketi kurduktan sonra sınıfımız içerisindeki değerleri alabileceğimiz kodu en alta ekleyerek paylaşıyorum.

En alttaki 2 satır aslında configurasyon dosyası içerisinden AppSettings ile tanımladığımız objeyi AppSettings sınıfı ile eşleştirip geliyor ve evet appSettingsSection içerisinde bir AppSettings tutuyor. Burada çağırılan Get<T>() fonksiyonunun dönüş tipi T olmaktadır yani biz

Ancak burada şunu unutmamak gerekir ki Get<T>() fonksiyonunun dönüş tipi nullable T dir yani T?

bu yüzden bizim değişkenimizi şu şekilde tanımlamamız gerekli

Evet bu yazımızda appsettings dosyasını oluşturup içerisinden ayarlarımızı okumayı başarılı bir şekilde tamamladık, burada paketler kurduk fakat asp.net web api uygulaması oluşturduğunuzda Configuration dosyası otomatik olark eklenecektir eğer siz configuration içerisinden bir sınıf getirmek istersenzi de artık ekleyeceğiniz paket biliyorsunuz.

Exit mobile version