Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

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.json dosyası oluşturmak.
  • Bu yapılandırma değerlerine eşlenen CloudInfoOptions adlı 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.json
  • secrets.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> CloudInfoOptions

Gerç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> CloudInfoOptions

Bu, 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> CloudInfoOptions

IOptionsSnapshot'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ürDeğişiklik Üzerine Güncellemeler
IOptions<t>SingletonHayır
IOptionsSnapshot<t>KapsamlıHer İstek
IOptionsMonitor<t>SingletonEvet

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.

Hero Worlddot related to C# Set Bayrak Enumunu Anlama: Bayrakları Atama
Hero Affiliate related to C# Set Bayrak Enumunu Anlama: Bayrakları Atama

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara