C# Set Bayrak Enumunu Anlama: Bayrakları Atama
[[academy-video-youtube({"vid": "ko1Ie9gDydY", "start_time": "0", "title": "C#'de Seçenekler Deseni 10 Dakikadan Kısa Sürede", "creator": "Tim Corey", "length": "10dk 39sn"})]]
Yapılandırma yönetimi, C#'ta ölçeklenebilir ve sürdürülebilir uygulamaların oluşturulmasında temel bir unsurdur. Yapılandırma ayarlarını ele almanın en etkili yollarından biri Seçenekler Deseni kullanmaktır. Tim Corey, The Options Pattern in C# in 10 Minutes or Less başlıklı videosunda bu desenin nasıl uygulanacağını etkili bir şekilde açıklayan kısa ama öğretici bir açıklama sunuyor. Bu makalede, Tim'in videosundaki açıklamalar ve gösterimlerle Seçenekler Desenini inceleyeceğiz.
Giriş
Tim, Seçenekler Deseni'ni yapılandırma dosyalarından bilgi almak ve bağımlılık enjeksiyonuna (DI) eklemek için güçlü ama basit bir yöntem olarak tanıtarak başlar. Bu düzenin birkaç avantajını vurgular, örneğin:
- Çalışma zamanı değer değişikliklerini yönetme becerisi.
- Dahili veri doğrulama desteği.
- Blazor uygulamaları dahil olmak üzere çeşitli C# proje türleriyle uyumluluk.
Tim, genellikle derinlemesine teknik eğitim sağlarken, bu videonun Seçenekler Deseni uygulaması için bir hızlı başlangıç kılavuzu olarak tasarlandığını vurguluyor.
Proje Ayarlama
Tim, sunucu tarafında render yapan bir Blazor Web Uygulaması ile Visual Studio'yu açarak başlıyor. Demo hızını artırmak için zaten birkaç modifikasyon yapmış. Ana kurulum:
- Üç anahtar-değer çifti içeren bir CloudInfo bölümü ile
appsettings.jsondosyası oluşturmak. - Bu yapılandırma değerlerine eşlenen
CloudInfoOptionsadlı bir Plain Old CLR Object (POCO) model kullanmak.
Yapılandırma 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 şunlardan da gelebileceğini açıklar:
appsettings.Development.jsonsecrets.json- Ortam değişkenleri
Yapılandırmayı 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'e aşağıdaki satırı ekler:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));Bu, appsettings.json dosyasının CloudInfo bölümünü CloudInfoOptions sınıfına bağlar. Tim, bu adımın değerlerin bağımlılık enjeksiyonunda mevcut olmasını sağladığını belirtir.
Bir Razor Bileşeninde Seçenekleri Enjekte Etme
Tim, özelleştirerek yapılandırma değerlerini dinamik olarak göstermek için Ana Sayfa bileşenine (Index.razor) geçer.
Bileşene IOptions arayüzünü enjekte eder:
@inject IOptions<CloudInfoOptions> CloudInfoOptionsGerçek değerleri almak için, bunları OnInitialized içinde atar:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Tim, IOptions<t>'in, yapılandırma değerlerinin Singleton örneğini sağladığını, yani uygulama yaşam döngüsü boyunca sabit kaldığını açıklar. Uygulama çalıştığında, yapılandırma değerleri doğru bir şekilde sayfada görünür.
Farklı Seçenekler Arayüzlerini 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 Singleton örneği sağlar. Tim, uygulama çalışıyorken yapılandırma dosyası güncellendiğinde değişikliklerin yansıtılmadığını gösteriyor, uygulama yeniden başlatılmadığı sürece.
2. Scope'lu Seçenekler - IOptionsSnapshot<t> Kullanımı
Her istekte güncellemeleri etkinleştirmek için Tim enjekte etmeyi değiştirir:
@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptionsBu, her yeni HTTP isteğinin taze yapılandırma değerlerini almasını garanti eder. Tim, appsettings.json'i değiştirerek, sayfayı yenileyerek ve güncellenmiş değerlerin hemen göründüğünü göstererek bunu test eder.
Değişimlerin uygulamayı yeniden başlatmadan yansıtılması gereken ancak canlı izleme gerektirmeyen senaryolar için IOptionsSnapshot<t>'in faydalı olduğunu açıklar.
3. Değişiklikleri İzleme - IOptionsMonitor<t> Kullanımı
Son olarak, Tim, gerçek zamanlı değişiklik algılama sağlayan IOptionsMonitor<t>'yi tanıtır. Enjeksiyonu günceller:
@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptionsIOptionsSnapshot'in her istek için güncellemeler yapmasının aksine, IOptionsMonitor<t> yapılandırma değerleri değiştiğinde olayları tetikleyebilir. Bu, yapılandırma değişikliklerine dinamik olarak tepki vermek gerektiğinde özellikle faydalıdır.
Tim, IOptionsMonitor<t>'in singleton tarafından desteklendiğini ancak temel yapılandırma dosyası değiştiğinde değerleri dinamik olarak yenileyebildiğini belirtir.
Sonuç
Tim, videoyu özetleyip, üç yaklaşım arasındaki önemli farkları açıklayarak bitiriyor:
| Arayüz | Ömür | Değişiklik Üzerine Güncellemeler |
|---|---|---|
IOptions<t> | Singleton | Hayır |
IOptionsSnapshot<t> | Kapsamlı | Her İstek |
IOptionsMonitor<t> | Singleton | Evet |
Seçenekler Deseni yapılandırma yönetimini basitleştirirken, bu farklı varyasyonları anlamanın proje gereksinimlerine göre doğru yaklaşımı seçmede yardımcı olduğunu vurgular.
Tim'in yaklaşımını takip ederek, geliştiriciler uygulama ayarlarını etkili bir şekilde yönetebilir, sorunsuz bağımlılık enjeksiyonu sağlarlar ve çalışma zamanı yapılandırma değişikliklerini verimli bir şekilde ele alabilir. Daha iyi anlamak için lütfen tam videoyu izleyin ve daha fazla açıklayıcı video için kanalını ziyaret edin.

