.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:
- appsettings.json gibi dosyaları Ayarlar
- Ortam değişkenleri
- Azure Key Vault
- Azure Uygulaması Yapılandırması
- Komut satırı bağımsız değişkenleri
- Yüklenen veya oluşturulan özel sağlayıcılar
- Dizin dosyaları
- Bellek içi .NET nesneleri
- Üçüncü taraf sağlayıcılar
Not
.NET çalışma zamanını yapılandırma hakkında bilgi için bkz . .NET Çalışma Zamanı yapılandırma ayarları.
Kavramlar ve soyutlamalar
Bir veya daha fazla yapılandırma kaynağı göz önüne alındığında, IConfiguration türü yapılandırma verilerinin birleşik bir görünümünü sağlar. Yapılandırma salt okunurdur ve yapılandırma düzeni program aracılığıyla yazılabilir olacak şekilde tasarlanmamıştır. Arabirim IConfiguration
, aşağıdaki diyagramda gösterildiği gibi tüm yapılandırma kaynaklarının tek bir gösterimidir:
Konsol uygulamalarını yapılandırma
dotnet yeni komut şablonu veya Visual Studio kullanılarak oluşturulan .NET konsol uygulamaları varsayılan olarak yapılandırma özelliklerini kullanıma sunmaz. Yeni bir .NET konsol uygulamasına yapılandırma eklemek için Microsoft.Extensions.Configuration'a bir paket başvurusu ekleyin. Bu paket, .NET uygulamalarında yapılandırmanın temelini oluşturur. ve ilgili türlerini sağlar ConfigurationBuilder .
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>()
{
["SomeKey"] = "SomeValue"
})
.Build();
Console.WriteLine(configuration["SomeKey"]);
// Outputs:
// SomeValue
Yukarıdaki kod:
- Yeni bir ConfigurationBuilder örneği oluşturur.
- Yapılandırma oluşturucusunun bellek içi anahtar-değer çiftleri koleksiyonunu ekler.
- Build() Bir IConfiguration örnek oluşturmak için yöntemini çağırır.
- Anahtarın değerini
SomeKey
konsola yazar.
Bu örnekte bellek içi yapılandırma kullanılıyor olsa da, dosya tabanlı, ortam değişkenleri, komut satırı bağımsız değişkenleri ve diğer yapılandırma kaynakları için işlevselliği ortaya çıkaran birçok yapılandırma sağlayıcısı vardır. Daha fazla bilgi için bkz . .NET'te yapılandırma sağlayıcıları.
Alternatif barındırma yaklaşımı
Genellikle, uygulamalarınız yalnızca okuma yapılandırmasından fazlasını yapar. Büyük olasılıkla bağımlılık ekleme, günlüğe kaydetme ve diğer hizmetleri kullanırlar. Bu hizmetleri kullanan uygulamalar için .NET Genel Ana Bilgisayar yaklaşımı önerilir. Bunun yerine, Microsoft.Extensions.Hosting'e paket başvurusu eklemeyi göz önünde bulundurun. Program.cs dosyasını aşağıdaki kodla eşleşecek şekilde değiştirin:
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
yöntemi, Host.CreateApplicationBuilder(String[]) uygulama için en yüksekten en düşük önceliğe kadar aşağıdaki sırayla varsayılan yapılandırma sağlar:
- Komut satırı yapılandırma sağlayıcısını kullanan komut satırı bağımsız değişkenleri.
- Ortam değişkenleri yapılandırma sağlayıcısını kullanan ortam değişkenleri.
- Uygulama
Development
ortamında çalıştığında uygulama gizli dizileri. - JSON yapılandırma sağlayıcısını kullanarak appsettings.json.
- appsettings.
Environment
. JSON yapılandırma sağlayıcısını kullanarak json. Örneğin, uygulama ayarları.Üretim.json ve appsettings.Geliştirme.json. - ChainedConfigurationProvider : Mevcut bir
IConfiguration
öğelerini kaynak olarak ekler.
Yapılandırma sağlayıcısı eklemek önceki yapılandırma değerlerini geçersiz kılar. Örneğin, Komut satırı yapılandırma sağlayıcısı son eklendiğinden diğer sağlayıcılardan gelen tüm değerleri geçersiz kılar. Hem appsettings.json hem de ortamda ayarlanırsaSomeKey
, ortam değeri appsettings.json sonra eklendiğinden kullanılır.
Bağlama
.NET yapılandırma soyutlamalarını kullanmanın temel avantajlarından biri, yapılandırma değerlerini .NET nesnelerinin örneklerine bağlama özelliğidir. Örneğin, JSON yapılandırma sağlayıcısı appsettings.json dosyalarını .NET nesneleriyle eşlemek için kullanılabilir ve bağımlılık ekleme ile kullanılır. Bu, ilgili ayar gruplarına kesin olarak belirlenmiş erişim sağlamak için sınıfları kullanan seçenekler desenini etkinleştirir. .NET yapılandırması çeşitli soyutlamalar sağlar. Aşağıdaki arabirimleri göz önünde bulundurun:
- IConfiguration: Bir anahtar/değer uygulama yapılandırma özellikleri kümesini temsil eder.
- IConfigurationRoot: Hiyerarşinin kökünü
IConfiguration
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ı (IConfigurationProvider) için belirsizdir. Başka bir deyişle, birden çok sağlayıcıdan herhangi bir yapılandırma değerine erişmek için bir IConfiguration
örneği kullanabilirsiniz.
Bağlayıcı, yapılandırma değerlerini işlemek için farklı yaklaşımlar kullanabilir:
- İlkel türler için doğrudan seri durumdan çıkarma (yerleşik dönüştürücüler kullanılarak).
- Türün TypeConverter bir türü olduğunda karmaşık bir tür için.
- Özellikleri olan karmaşık bir tür için Düşünceler.
Not
Bağlayıcının birkaç sınırlaması vardır:
- Özel ayarlayıcıları varsa veya türleri dönüştürülemiyorsa özellikler yoksayılır.
- Karşılık gelen yapılandırma anahtarları olmayan özellikler yoksayılır.
Bağlama hiyerarşileri
Yapılandırma değerleri hiyerarşik veriler içerebilir. Hiyerarşik nesneler, yapılandırma anahtarlarında sınırlayıcının :
kullanımıyla temsil edilir. Bir yapılandırma değerine erişmek için, hiyerarşiyi :
sınırlandırmak için karakterini kullanın. Örneğin, aşağıdaki yapılandırma değerlerini göz önünde bulundurun:
{
"Parent": {
"FavoriteNumber": 7,
"Child": {
"Name": "Example",
"GrandChild": {
"Age": 3
}
}
}
}
Aşağıdaki tabloda örnek anahtarlar ve önceki örnek JSON için karşılık gelen değerler temsil eder:
Anahtar | Değer |
---|---|
"Parent:FavoriteNumber" |
7 |
"Parent:Child:Name" |
"Example" |
"Parent:Child:GrandChild:Age" |
3 |
Temel örnek
Yapılandırma değerlerine genel konak yaklaşımının yardımı olmadan temel biçimlerinde erişmek için türünü doğrudan kullanınConfigurationBuilder.
İpucu
Tür System.Configuration.ConfigurationBuilder , türünden Microsoft.Extensions.Configuration.ConfigurationBuilder farklıdır. Bu içeriğin tümü NuGet paketlerine Microsoft.Extensions.*
ve ad alanlarına özgüdür.
Aşağıdaki C# projesini göz önünde bulundurun:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.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="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
</ItemGroup>
</Project>
Yukarıdaki proje dosyası birkaç yapılandırma NuGet paketine başvurur:
- Microsoft.Extensions.Configuration.Binder: için yapılandırma sağlayıcılarında
Microsoft.Extensions.Configuration
bir nesneyi verilere bağlama işlevi. - Microsoft.Extensions.Configuration.Json: için
Microsoft.Extensions.Configuration
JSON yapılandırma sağlayıcısı uygulaması. - Microsoft.Extensions.Configuration.EnvironmentVariables: için
Microsoft.Extensions.Configuration
ortam değişkenleri yapılandırma sağlayıcısı uygulaması.
Örnek bir appsettings.json dosyası düşünün:
{
"Settings": {
"KeyOne": 1,
"KeyTwo": true,
"KeyThree": {
"Message": "Oh, that's nice...",
"SupportedVersions": {
"v1": "1.0.0",
"v3": "3.0.7"
}
},
"IPAddressRange": [
"46.36.198.121",
"46.36.198.122",
"46.36.198.123",
"46.36.198.124",
"46.36.198.125"
]
}
}
Şimdi, bu JSON dosyası göz önüne alındığında, yapılandırma oluşturucusunu doğrudan kullanan örnek bir tüketim deseni aşağıda verilmiştir:
using Microsoft.Extensions.Configuration;
// Build a config object, using env vars and JSON providers.
IConfigurationRoot 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ği ConfigurationBuilderoluşturur.
"appsettings.json"
JSON yapılandırma sağlayıcısı tarafından tanınacak dosyayı ekler.- Ortam Değişken yapılandırma sağlayıcısı tarafından tanınıyor olarak ortam değişkenlerini ekler.
- Örneği kullanarak
config
gerekli"Settings"
bölümü ve ilgiliSettings
örneği alır.
Settings
Nesne aşağıdaki gibi şekillendirilir:
public sealed class Settings
{
public required int KeyOne { get; set; }
public required bool KeyTwo { get; set; }
public required NestedSettings KeyThree { get; set; } = null!;
}
public sealed class NestedSettings
{
public required string Message { get; set; } = null!;
}
Barındırma ile ilgili temel örnek
Değere IConfiguration
erişmek için NuGet paketine Microsoft.Extensions.Hosting
yeniden güvenebilirsiniz. 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>net8.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="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Yukarıdaki proje dosyası aşağıdakileri tanımlar:
- Uygulama yürütülebilir bir dosyadır.
- Proje derlendiğinde çıkış dizinine bir appsettings.json dosyası kopyalanır.
Microsoft.Extensions.Hosting
NuGet paket başvurusu eklenir.
Projenin köküne aşağıdaki içeriklerle 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.CreateApplicationBuilder(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ırdığınızda Host.CreateApplicationBuilder
, JSON yapılandırmasını bulma ve örneği aracılığıyla IConfiguration
kullanıma sunma davranışını tanımlar. Örnekten host
hizmet sağlayıcısından IConfiguration
örneği isteyebilir ve ardından değerler isteyebilirsiniz.
İpucu
Ham IConfiguration
örneğin bu şekilde kullanılması kullanışlı olsa da çok iyi ölçeklendirilmiyor. Uygulamaların karmaşıklığı arttığında ve bunlara karşılık gelen yapılandırmalar daha karmaşık hale geldiğinde, alternatif olarak seçenekler desenini kullanmanızı öneririz.
Dizin oluşturucu API'sini barındırma ve kullanma ile ilgili temel örnek
Önceki örnekteki aynı appsettings.json dosya içeriğini göz önünde bulundurun:
{
"SupportedVersions": {
"v1": "1.0.0",
"v3": "3.0.7"
},
"IPAddressRange": [
"46.36.198.123",
"46.36.198.124",
"46.36.198.125"
]
}
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.CreateApplicationBuilder(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.
string? ipOne = config["IPAddressRange:0"];
string? ipTwo = config["IPAddressRange:1"];
string? ipThree = config["IPAddressRange:2"];
string? versionOne = config["SupportedVersions:v1"];
string? versionThree = config["SupportedVersions:v3"];
// Write the values to the console.
Console.WriteLine($"IPAddressRange:0 = {ipOne}");
Console.WriteLine($"IPAddressRange:1 = {ipTwo}");
Console.WriteLine($"IPAddressRange:2 = {ipThree}");
Console.WriteLine($"SupportedVersions:v1 = {versionOne}");
Console.WriteLine($"SupportedVersions:v3 = {versionThree}");
// Application code which might rely on the config could start here.
await host.RunAsync();
// This will output the following:
// IPAddressRange:0 = 46.36.198.123
// IPAddressRange:1 = 46.36.198.124
// IPAddressRange:2 = 46.36.198.125
// SupportedVersions:v1 = 1.0.0
// SupportedVersions:v3 = 3.0.7
Değerlere, her anahtarın bir dize olduğu ve değerin bir dize olduğu dizin oluşturucu API'si kullanılarak erişilir. Yapılandırma özellikleri, nesneleri, dizileri ve sözlükleri destekler.
Konfigürasyon sağlayıcıları
Aşağıdaki tabloda .NET Core uygulamalarında kullanılabilen yapılandırma sağlayıcıları gösterilmektedir.
Provider | Şuradan yapılandırma sağlar |
---|---|
Azure Uygulama yapılandırması sağlayıcı | Azure Uygulama Yapılandırması |
Azure Key Vault yapılandırma sağlayıcısı | Azure Key Vault |
Komut satırı yapılandırması sağlayıcı | Komut satırı parametreleri |
Özel yapılandırma sağlayıcı | Özel kaynak |
Ortam Değişkenleri yapılandırma sağlayıcı | Ortam değişkenleri |
Dosya yapılandırma sağlayıcı | JSON, XML ve INI dosyaları |
Dosya başına anahtar yapılandırma sağlayıcı | Dizin dosyaları |
Bellek yapılandırma sağlayıcı | Bellek için koleksiyonlar |
Uygulama gizli dizileri (Gizli Dizi Yöneticisi) | Kullanıcı profili dizinindeki dosya |
İpucu
Yapılandırma sağlayıcılarının eklenme sırası önemlidir. Birden çok yapılandırma sağlayıcısı kullanıldığında ve birden fazla sağlayıcı aynı anahtarı belirttiğinde, eklenen son sağlayıcı kullanılır.
Ç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'teki yapılandırma sağlayıcıları
- Özel yapılandırma sağlayıcısı uygulama
- yapılandırma hataları github.com/dotnet/runtime deposunda oluşturulmalıdır
- ASP.NET Core'da yapılandırma