Asp.Net Core - Dependency Injection ile Konfigurasyon Değerlerine Ulaşmak (Options Pattern)

Asp.Net Core uygulamalarında konfigürasyon bilgileri appsettings.json dosyasında tutulmaktadır. Bu dosyada tanımlanan değerlere uygulamadaki çeşitli yerlerde ihtiyacımız olacaktır.

Örnek bir appsettings.json dosyasında Google Invisible Recaptcha Site ve Gizli anahtar değerlerini uygulamamızda kullanabilmek amacıyla tutmaktayız. 

Aşağıdaki örnek kodda IConfiguration interfacesinden bir configuration nesnesinin enjeksiyonu yapılarak appsettings.json dosyasından GoogleInVisibleRecaptcha sectionundaki SecretKey değerinin alınabilmesi sağlanır. 

Bu yazımda değineceğim Options Pattern kullanmadan da konfigürasyon dosyasındaki değerlere yukarıdaki gibi ulaşabiliriz. Fakat bu yol, yazılan kodun tekrarlı olmasına sebep olacak ve temiz kod kavramına ters düşecektir. Ayrıca okunabilirliğini de düşüreceği kanısındayım. 

Options Pattern, appsettings.json dosyasında birbiriyle ilişkili konfigürasyon değerlerinin sınıf yapılarını kullanarak strongly-typed yapılar haline getiren bir desendir. 

Bu desenin sağladığı sınıf yapısı ile, konfigürasyon dosyasındaki değerlerin nesnede tutulup, dependency injection yöntemi ile istediğimiz yerlerde kullanabilmemizi sağlar. Ayrıca ilişkili konfigürasyon ayarlarının sınıf yapısında oluşturularak Separations of Concerns ilkesine uygun yapıya ulaşabiliriz. 

Microsoft'un Options Pattern ile ilgili dokümantasyonu için tıklayınız. 

Senaryomuz Google Invisible Recaptcha Site ve Gizli anahtar (SiteKey ve SecretKey) değerlerini appsettings.json dosyasından gerekli yerlerde kullanmak amacıyla bir sınıf oluşturup bu sınıftan bir nesneyi dependency injection ile kullanmak üzerinedir.

Bu patternin uygulama adımları aşağıdaki gibidir. 

1-) appsettings.json dosyasından GoogleInVisibleRecaptcha SiteKey ve SecretKey sectionlarına ulaşabilmek için GoogleInVisibleRecaptcha sınıfı SiteKey ve SecretKey sectionları için propertyler tanımladık. Property isimlerinin, eşleşmenin olabilmesi için dosyadaki section adları ile aynı olmasına dikkat edilir. 

2-) Sınıfımızı oluşturduktan sonra Startup.cs dosyasındaki ConfigureServices metodunda kullanılacak sınıf adını vererek Configure metodunu ekliyoruz. Parametre olarak sınıf adını verdiğimiz section adını giriyoruz. (GoogleInVisibleRecaptcha

3-) Controller ya da farklı bir yerde, dependency injection ile enjekte ederek istediğimiz yerde kullanabileceğiz. Bunun için constructor tarafında IOptions<GoogleInVisibleRecaptcha> türünden bir parametre geçerek, parametrenin Value değeri ile  GoogleInVisibleRecaptcha türünden nesneye atama yapabiliriz. Value değerine atamayı ikinci adımdaki Configure metodu yapmıştı. Bu şekilde sürekli GetSection kullanmadan oluşturduğumuz nesneyi kullanarak değerleri okuyabiliriz. 

Özetle Option Pattern ile birbirleriyle ilişkili konfigürasyon değerlerini nesne ile okuyabilmek ve daha temiz bir yapı kurmak için bir teknik olarak kullanabilirsiniz. 

Kodların bulunduğu Github linkine erişmek için tıklayınız.  Keyifli okumalar :)

Yorumlar