.NET'te yapılandırma

.NET'te yapılandırma, bir veya daha fazla yapılandırma sağlayıcısı kullanılarak gerçekleştirilir. Yapılandırma sağlayıcıları, çeşitli yapılandırma kaynaklarını kullanarak anahtar-değer çiftlerinden yapılandırma verilerini okur:

  • Ayarlar appsettings.json gibi dosyalarda
  • Ortam değişkenleri
  • Azure Key Vault
  • Azure Uygulama Yapılandırması
  • Komut satırı bağımsız değişkenleri
  • Özel sağlayıcılar, yüklenmiş veya oluşturulmuş
  • Dizin dosyaları
  • Bellek içinde .NET nesneleri
  • Üçüncü taraf sağlayıcılar

Konsol uygulamalarını yapılandırma

Dotnet new veya Visual Studio kullanılarak oluşturulan yeni .NET konsol uygulamaları varsayılan olarak yapılandırma özelliklerini açığa çıkarmaz. Yeni bir .NET konsol uygulamasına yapılandırma eklemek için bir paket başvurusu Microsoft.Extensions.Hosting ekleyin. Program.cs dosyasını aşağıdaki kodla eş olacak şekilde değiştirme:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

yöntemi, Host.CreateDefaultBuilder(String[]) uygulama için varsayılan yapılandırmayı aşağıdaki sırayla sağlar:

  1. ChainedConfigurationProvider: Var olan bir IConfiguration kaynak olarak ekler.
  2. JSON yapılandırma sağlayıcısını kullanarak appsettings.json.
  3. Appsettings. Environment JSON yapılandırma sağlayıcısını kullanan .json. Örneğin, appsettings. Üretim_._json ve uygulama ayarları.\Development** _._json*.
  4. Uygulama ortamda çalıştır geldiğinde uygulama gizli Development dizileri.
  5. Ortam Değişkenleri yapılandırma sağlayıcısını kullanan ortam değişkenleri.
  6. Komut satırı yapılandırma sağlayıcısını kullanan komut satırı bağımsız değişkenleri.

Daha sonra eklenen yapılandırma sağlayıcıları önceki anahtar ayarlarını geçersiz kılar. Örneğin, hem SomeKey appsettings.json hem de ortamda ayarlanırsa ortam değeri kullanılır. Varsayılan yapılandırma sağlayıcılarını kullanan Komut satırı yapılandırma sağlayıcısı diğer tüm sağlayıcıları geçersiz kılar.

Bağlama

.NET yapılandırma özetlerini kullanmanın temel avantajlarından biri, yapılandırma değerlerini .NET nesnelerinin örneklerine bağlayabilme özelliğidir. Örneğin, JSON yapılandırma sağlayıcısı appsettings.json dosyalarını .NET nesnelerine eşlemek için kullanılabilir ve bağımlılık ekleme ile kullanılır. Bu, ilgili ayar gruplarınakesin türe sahip erişim sağlamak için sınıfları kullanan seçenekler desenini sağlar. .NET yapılandırması çeşitli soyutlamalar sağlar. Aşağıdaki arabirimleri göz önünde bulundurabilirsiniz:

Bu soyutlamalar, temel yapılandırma sağlayıcılarından ( ) IConfigurationProvider bağımsızdır. Başka bir deyişle, birden çok sağlayıcıdan IConfiguration herhangi bir yapılandırma değerine erişmek için bir örneği kullanabilirsiniz.

Temel örnek

Yapılandırma değerlerine temel biçimlerinde erişmek için, genel konak yaklaşımının yardımı olmadan doğrudan ConfigurationBuilder kullanın.

İpucu

System.Configuration.ConfigurationBuilder, ile Microsoft.Extensions.Configuration.ConfigurationBuilder farklıdır. Bu içeriğin hepsi, uygulama Microsoft.Extensions.* paketlerine ve NuGet özeldir.

Aşağıdaki C# projesini göz önünde bulundurarak:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>true</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
  </ItemGroup>

</Project>

Yukarıdaki proje dosyası, çeşitli yapılandırma ve NuGet başvurur:

Örnek bir appsettings.json dosyası düşünün:

{
    "Settings": {
        "KeyOne": 1,
        "KeyTwo": true,
        "KeyThree": {
            "Message": "Oh, that's nice..."
        }
    }
}

Burada verilen bu JSON dosyası, doğrudan yapılandırma oluşturucusu kullanan örnek bir tüketim düzenidir:

using Microsoft.Extensions.Configuration;

// Build a config object, using env vars and JSON providers.
IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables()
    .Build();

// Get values from the config given their key and their target type.
Settings settings = config.GetRequiredSection("Settings").Get<Settings>();

// Write the values to the console.
Console.WriteLine($"KeyOne = {settings.KeyOne}");
Console.WriteLine($"KeyTwo = {settings.KeyTwo}");
Console.WriteLine($"KeyThree:Message = {settings.KeyThree.Message}");

// Application code which might rely on the config could start here.

// This will output the following:
//   KeyOne = 1
//   KeyTwo = True
//   KeyThree:Message = Oh, that's nice...

Yukarıdaki C# kodu:

  • bir örneğini ConfigurationBuilder hazırlar.
  • "appsettings.json"JSON yapılandırma sağlayıcısı tarafından tanınması için dosyasını ekler.
  • Ortam değişkenlerini Ortam Değişkeni yapılandırma sağlayıcısı tarafından tanınıyor olarak ekler.
  • configÖrnek, gerekli bölümü almak ve "Settings" karşılık gelen örneği almak için Settings kullanılır.

SettingsNesnesi aşağıdaki şekilde şekillendirildi:

public class Settings
{
    public int KeyOne { get; set; }
    public bool KeyTwo { get; set; }
    public NestedSettings KeyThree { get; set; } = null!;
}
public class NestedSettings
{
    public string Message { get; set; } = null!;
}

Barındırma ile ilgili temel örnek

Değere IConfiguration erişmek için yeniden Microsoft.Extensions.Hosting NuGet. Yeni bir konsol uygulaması oluşturun ve içine aşağıdaki proje dosyası içeriğini yapıştırın:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>true</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
  </ItemGroup>

</Project>

Yukarıdaki proje dosyası şunları tanımlar:

  • Uygulamanın yürütülebilir bir dosya olduğunu.
  • Proje derlenmiş olduğunda bir appsettings.json dosyasının çıkış dizinine kopyalanması.
  • Bu Microsoft.Extensions.Hosting NuGet paketi başvurusu eklenmiştir.

Aşağıdaki içeriklerle projenin köküne appsettings.json dosyasını ekleyin:

{
    "KeyOne": 1,
    "KeyTwo": true,
    "KeyThree": {
        "Message": "Thanks for checking this out!"
    }
}

Program.cs dosyasının içeriğini aşağıdaki C# koduyla değiştirin:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args).Build();

// Ask the service provider for the configuration abstraction.
IConfiguration config = host.Services.GetRequiredService<IConfiguration>();

// Get values from the config given their key and their target type.
int keyOneValue = config.GetValue<int>("KeyOne");
bool keyTwoValue = config.GetValue<bool>("KeyTwo");
string keyThreeNestedValue = config.GetValue<string>("KeyThree:Message");

// Write the values to the console.
Console.WriteLine($"KeyOne = {keyOneValue}");
Console.WriteLine($"KeyTwo = {keyTwoValue}");
Console.WriteLine($"KeyThree:Message = {keyThreeNestedValue}");

// Application code which might rely on the config could start here.

await host.RunAsync();

// This will output the following:
//   KeyOne = 1
//   KeyTwo = True
//   KeyThree:Message = Thanks for checking this out!

Bu uygulamayı çalıştırarak Host.CreateDefaultBuilder JSON yapılandırmasını bulma ve örneği aracılığıyla ortaya çıkarma davranışını IConfiguration tanımlar. hostÖrnekten, hizmet sağlayıcısından örneği ve IConfiguration ardından değerler için sorabilirsiniz.

İpucu

Ham örneği IConfiguration bu şekilde, kullanışlı bir şekilde kullanmak çok iyi ölçeklendirmez. Uygulamalar karmaşık hale geldiğinde ve buna karşılık gelen yapılandırmalar daha karmaşık hale geldiğinde, seçenekler desenini alternatif olarak kullanmalarını öneririz.

Yapılandırma sağlayıcıları

Aşağıdaki tabloda .NET Core uygulamaları için kullanılabilen yapılandırma sağlayıcıları yer alır.

Sağlayıcı şundan yapılandırma sağlar:
Azure Uygulama yapılandırma sağlayıcısı Azure Uygulama Yapılandırması
Azure Key Vault yapılandırma sağlayıcısı Azure Key Vault
Komut satırı yapılandırma sağlayıcısı Komut satırı parametreleri
Özel yapılandırma sağlayıcısı Özel kaynak
Ortam Değişkenleri yapılandırma sağlayıcısı Ortam değişkenleri
Dosya yapılandırma sağlayıcısı JSON, XML ve INI dosyaları
Dosya başına anahtar yapılandırma sağlayıcısı Dizin dosyaları
Bellek yapılandırma sağlayıcısı Bellek içinde koleksiyonlar
Uygulama gizli dizileri (Gizli Dizi Yöneticisi) Kullanıcı profili dizininde dosya

Çeşitli yapılandırma sağlayıcıları hakkında daha fazla bilgi için bkz. .NET'te yapılandırma sağlayıcıları.

Ayrıca bkz.