C# Set Flag Enum Anlama: Bayrak Atama
[{academy-video-youtube{"vid": "ko1Ie9gDydY", "start_time": "0", "title": "10 Dakika veya Daha Kısa Sürede C#'da Seçenekler Deseni", "creator": "Tim Corey", "length": "10m 39s"})}]
Konfigürasyon yönetimi, C#'da ölçeklenebilir ve sürdürülebilir uygulamalar oluşturmanın önemli bir yönüdür. Konfigürasyon ayarlarını ele almanın en etkili yollarından biri Seçenekler Deseni'ni kullanmaktır. Videosunda, 10 Dakika veya Daha Kısa Sürede C#'da Seçenekler Deseni, Tim Corey bu desenin kısa ancak etkili bir açıklamasını ve nasıl etkili bir şekilde uygulanacağını sağlar. Bu makalede, Tim'in videosundaki açıklamalar ve gösterimler aracılığıyla Seçenekler Deseni'ni keşfedeceğiz.
Giriş
Tim, Seçenekler Deseni'ni konfigürasyon dosyalarından bilgi almak ve bunları bağımlılık enjeksiyonuna (DI) enjekte etmek için güçlü ancak basit bir yol olarak tanıtarak başlar. Bu desenin birkaç avantajını vurgular, örneğin:
- Çalışma zamanı değer değişikliklerini yönetme yeteneği.
- Dahili veri doğrulama desteği.
- Blazor uygulamaları da dahil olmak üzere çeşitli C# proje türleriyle uyumluluk.
Tim, genellikle derinlemesine teknik eğitimler sağlasa da, bu videonun Seçenekler Deseni'nin uygulanmasına yönelik bir hızlı başlama rehberi olarak tasarlandığını vurgular.
Projeyi Kurma
Tim, sadece sunucu tarafı sunumu Blazor Web Uygulaması ile Visual Studio'yu açarak başlar. Gösterimi hızlandırmak için birkaç değişiklik yaptığını belirtir. Temel ayar içerişi:
- Üç anahtar-değer çifti içeren bir CloudInfo bölümüyle
appsettings.jsondosyası oluşturma. - Bu yapılandırma değerlerine eşlenen Sade Eski CLR Nesne (POCO) modeli olan
CloudInfoOptionskullanımı.
Konfigürasyon Dosyası
appsettings.json dosyası aşağıdaki bölümü içerir:
{
"CloudInfo": {
"Storage": "Azure Storage",
"Website": "Azure Static Web Apps",
"API": "Azure Web App"
}
}Tim, appsettings.json kullanıyor olmasına rağmen, yapılandırma değerlerinin aşağıdakilerden de gelebileceğini açıklar:
appsettings.Development.jsonsecrets.json- Ortam değişkenleri
Konfigürasyonu Seçeneklere Bağlama
Şimdi, Tim yapılandırma değerlerini CloudInfoOptions sınıfına bağlamayı ve bunları DI'ye enjekte etmeyi açıklar.
Program.cs'de Seçenekleri Kaydetme
Tim, Program.cs içinde, builder.Services içine şu satırı ekler:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));Bu, appsettings.json CloudInfo bölümünü CloudInfoOptions sınıfına bağlar. Tim, bu adımın değerlerin bağımlılık enjeksiyonunda kullanılabilir olmasını sağladığını belirtir.
Bir Razor Bileşeninde Seçenekleri Enjekte Etme
Tim, Ana Sayfa bileşeni (Index.razor) üzerine geçer ve yapılandırma değerlerini dinamik olarak göstermek için değiştirir.
O, bileşene IOptions arayüzü enjekte eder:
@inject IOptions<CloudInfoOptions> CloudInfoOptionsGerçek değerleri almak için, onları OnInitialized içine atar:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Tim, IOptions<T>'in yapılandırma değerlerinin tekil örneğini (singleton) sağladığını ve bunun uygulamanın yaşam döngüsü boyunca sabit kaldığını açıklar. Uygulama çalıştırıldığında, konfigürasyon değerleri sayfada doğru şekilde görünür.
Farklı Seçenekler Arabirimlerini Keşfetme
Tim ardından Seçenekler Deseni'ni kullanmanın üç farklı yolunu tanıtır:
1. Singleton Seçenekler
Varsayılan olarak, IOptions<T> bir tekil örnek sağlar. Tim, uygulama çalışırken yapılandırma dosyası güncellenirse değişikliklerin yansımayacağını ve uygulamanın yeniden başlatılması gerekeceğini gösteriyor.
2. Scoped Options - IOptionsSnapshot<t> kullanımı
Her istek için güncellemeleri mümkün kılmak için, Tim enjeksiyonu şu şekilde değiştirir:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptionsBu, her yeni HTTP isteğinin taze konfigürasyon değerleri almasını sağlar. Tim bunu appsettings.json'yi değiştirerek, sayfayı yenileyerek ve güncellenen değerlerin artık hemen göründüğünü göstererek test eder.
IOptionsSnapshot<t>'in, uygulamayı yeniden başlatmadan değişikliklerin yansıtılması gerektiği senaryolar için yararlı olduğunu açıklar, ancak canlı izlemeye gerek yoktur.
3. Değişikliklerin İzlenmesi - IOptionsMonitor<t> kullanımı
Son olarak, Tim gerçek zamanlı değişiklik algılama sağlayan IOptionsMonitor<t> tanıtır. Enjeksiyonu şu şekilde günceller:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptionsIOptionsSnapshot her istekte güncellenirken, IOptionsMonitor<t> yapılandırma değerleri değiştiğinde olayları tetikleyebilir. Bu, yapılandırma değişikliklerine dinamik olarak tepki vermeniz gerektiğinde özellikle yararlıdır.
Tim, IOptionsMonitor<T>'un tekil ömürlü (singleton) olarak desteklendiğini, ancak altta yatan yapılandırma dosyası değiştiğinde değerleri dinamik olarak yenileyebildiğini belirtir.
Sonuç
Tim, üç yaklaşımın ana farklarını özetleyerek videoyu sona erdirir:
| Arabirim | Canlılık | Değişiklik Üzerinde Güncellemeler |
|---|---|---|
IOptions<t> | Singleton | Hayır |
IOptionsSnapshot<t> | Scoped | Her İstek İçin |
IOptionsMonitor<t> | Singleton | Evet |
Seçenekler Deseni'nin konfigürasyon yönetimini basitleştirdiğini vurgular, ancak bu farklı varyasyonlar hakkında bilgi sahibi olmak proje gereksinimlerine dayalı doğru yaklaşımı seçmeye yardımcı olur.
Tim'in yaklaşımını takip ederek, geliştiriciler uygulama ayarlarını verimli bir şekilde yönetebilirler, sorunsuz bağımlılık enjeksiyonu sağlayabilir ve çalışma zamanı yapılandırma değişikliklerini etkili bir şekilde ele alabilirler. Daha iyi anlamak için lütfen videoyu tamamen izleyin ve C# hakkında daha fazla bilgilendirici video için kanalına mutlaka uğrayın.

