.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:
- ChainedConfigurationProvider: Var olan bir
IConfigurationkaynak olarak ekler. - JSON yapılandırma sağlayıcısını kullanarak appsettings.json.
- Appsettings.
EnvironmentJSON yapılandırma sağlayıcısını kullanan .json. Örneğin, appsettings. Üretim_._json ve uygulama ayarları.\Development** _._json*. - Uygulama ortamda çalıştır geldiğinde uygulama gizli
Developmentdizileri. - Ortam Değişkenleri yapılandırma sağlayıcısını kullanan ortam değişkenleri.
- 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:
- IConfiguration: Bir anahtar/değer uygulama yapılandırma özellikleri kümesi temsil eder.
- IConfigurationRoot: IConfiguration hiyerarşisinin kökünü temsil eder.
- IConfigurationSection: Uygulama yapılandırma değerlerinin bir bölümünü temsil eder.
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:
- Microsoft.Extensions.Configuration.Binder:için yapılandırma sağlayıcılarında bir nesneyi verilere bağlama
Microsoft.Extensions.Configurationişlevselliği. - Microsoft.Extensions.Configuration.Json:için JSON yapılandırma sağlayıcısı
Microsoft.Extensions.Configurationuygulaması. - Microsoft.Extensions.Configuration.EnvironmentVariables:için ortam değişkenleri yapılandırma sağlayıcısı
Microsoft.Extensions.Configurationuygulaması.
Ö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çinSettingskullanı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.HostingNuGet 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.
- .NET'te yapılandırma sağlayıcıları
- Özel yapılandırma sağlayıcısı uygulama
- Yapılandırma hataları, github.com/dotnet/extensions oluşturulmelidir