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

Diğer Kategoriler

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.json dosyası oluşturma.
  • Bu yapılandırma değerlerine eşlenen Sade Eski CLR Nesne (POCO) modeli olan CloudInfoOptions kullanı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.json
  • secrets.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> CloudInfoOptions

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

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

IOptionsSnapshot 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:

ArabirimCanlılıkDeğişiklik Üzerinde Güncellemeler
IOptions<t>SingletonHayır
IOptionsSnapshot<t>ScopedHer İstek İçin
IOptionsMonitor<t>SingletonEvet

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.

Hero Worlddot related to C# Set Flag Enum Anlama: Bayrak Atama
Hero Affiliate related to C# Set Flag Enum Anlama: Bayrak Atama

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

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

Iron Destek Ekibi

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