Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Konfigurace v rozhraní .NET se provádí pomocí jednoho nebo více poskytovatelů konfigurace . Poskytovatelé konfigurace čtou konfigurační data z párů klíč-hodnota pomocí různých zdrojů konfigurace:
- Soubory nastavení, například appsettings.json
- Proměnné prostředí
- Azure Key Vault
- Azure App Configuration
- Argumenty příkazového řádku
- Vlastní poskytovatelé, nainstalovaní nebo vytvoření
- Soubory adresářů
- Objekty .NET v paměti
- Poskytovatelé třetích stran
Poznámka
Informace o konfiguraci samotného modulu runtime .NET najdete v tématu nastavení konfigurace modulu runtime .NET.
Koncepty a abstrakce
Vzhledem k jednomu nebo více zdrojům konfigurace poskytuje typ IConfiguration jednotné zobrazení konfiguračních dat. Konfigurace je jen pro čtení a vzor konfigurace není navržený tak, aby byl programově zapisovatelný. Rozhraní IConfiguration je jedinou reprezentací všech zdrojů konfigurace, jak je znázorněno v následujícím diagramu:
Konfigurace konzolových aplikací
Konzolové aplikace .NET vytvořené pomocí nové šablony příkazů dotnet nebo sady Visual Studio ve výchozím nastavení nezpřístupňují možnosti konfigurace. Chcete-li přidat konfiguraci v nové konzolové aplikaci .NET, přidat odkaz na balíček do Microsoft.Extensions.Configuration. Tento balíček je základem konfigurace v aplikacích .NET. Poskytuje ConfigurationBuilder a související typy.
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>()
{
["SomeKey"] = "SomeValue"
})
.Build();
Console.WriteLine(configuration["SomeKey"]);
// Outputs:
// SomeValue
Předchozí kód:
- Vytvoří novou instanci ConfigurationBuilder.
- Přidá do konfigurátoru kolekci párů klíč-hodnota uloženou v paměti.
- Zavolá metodu Build() k vytvoření instance IConfiguration.
- Zapíše hodnotu klíče
SomeKeydo konzoly.
I když tento příklad používá konfiguraci v paměti, je k dispozici mnoho poskytovatelů konfigurace, které zveřejňují funkce pro souborové proměnné, proměnné prostředí, argumenty příkazového řádku a další zdroje konfigurace. Další informace naleznete v tématu poskytovatelé konfigurace v rozhraní .NET.
Alternativní přístup k hostování
Vaše aplikace obvykle dělají víc než jen konfiguraci čtení. Pravděpodobně budou používat injektáž závislostí, logování a další služby. Pro aplikace, které používají tyto služby, se doporučuje .NET Generic Host. Místo toho zvažte přidat referenci na balíček do Microsoft.Extensions.Hosting. Upravte soubor Program.cs tak, aby odpovídal následujícímu kódu:
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
Metoda Host.CreateApplicationBuilder(String[]) poskytuje výchozí konfiguraci aplikace v následujícím pořadí, od nejvyšší po nejnižší prioritu:
- Argumenty příkazového řádku použitím zprostředkovatele konfigurace příkazového řádku.
- Proměnné prostředí využívající konfiguračního zprostředkovatele proměnných prostředí .
-
tajemství aplikace, když aplikace běží v prostředí
Development. - appsettings.json pomocí zprostředkovatele konfigurace JSON .
-
nastavení aplikace.
Environment.json pomocí zprostředkovatele konfigurace JSON. Například nastavení aplikace.Produkční. json a appsettings.vývoj.json. -
ChainedConfigurationProvider: Přidá existující
IConfigurationjako zdroj.
Přidání zprostředkovatele konfigurace přepíše předchozí hodnoty konfigurace. Například poskytovatel konfigurace příkazového řádku přepíše všechny ostatní hodnoty, jelikož byl přidán jako poslední. Pokud je SomeKey nastaven v appsettings.json i v prostředí, použije se hodnota prostředí, protože byla přidána po appsettings.json.
Závazný
Jednou z klíčových výhod použití abstrakcí konfigurace .NET je možnost svázat konfigurační hodnoty s instancemi objektů .NET. Například poskytovatel konfigurace JSON lze použít k mapování appsettings.json souborů na objekty .NET a používá se s vkládáním závislostí. Toto umožňuje vzorec možností , který používá třídy pro zajištění typově silného přístupu ke skupinám souvisejících nastavení. Výchozí pořadač je založený na reflexi, ale existuje alternativa generátoru zdroje, který se dá snadno povolit.
Konfigurace .NET poskytuje různé abstrakce. Zvažte následující rozhraní:
- IConfiguration: Představuje sadu vlastností konfigurace aplikace klíč/hodnota.
-
IConfigurationRoot: Představuje kořen hierarchie
IConfiguration. - IConfigurationSection: Představuje část hodnot konfigurace aplikace.
Tyto abstrakce jsou nezávislé na příslušném poskytovateli konfigurace (IConfigurationProvider). Jinými slovy, můžete použít instanci IConfiguration pro přístup k libovolné hodnotě konfigurace od více poskytovatelů.
Pořadač může použít různé přístupy ke zpracování hodnot konfigurace.
- Přímá deserializace (pomocí integrovaných převaděčů) pro primitivní typy
- TypeConverter pro komplexní typ, když má typ jeden.
- Odraz komplexního typu, který má vlastnosti.
Poznámka
Pořadač má několik omezení:
- Vlastnosti jsou ignorovány, pokud mají soukromý nastavovač nebo jejich typ nelze převést.
- Vlastnosti bez odpovídajících konfiguračních klíčů se ignorují.
Hierarchické vazby
Hodnoty konfigurace můžou obsahovat hierarchická data. Hierarchické objekty jsou reprezentovány použitím oddělovače : v konfiguračních klíčích. Pokud chcete získat přístup k hodnotě konfigurace, použijte : znak k oddělení hierarchie. Představte si například následující hodnoty konfigurace:
{
"Parent": {
"FavoriteNumber": 7,
"Child": {
"Name": "Example",
"GrandChild": {
"Age": 3
}
}
}
}
Následující tabulka představuje ukázkové klíče a jejich odpovídající hodnoty pro předchozí příklad JSON:
| Klíč | Hodnota |
|---|---|
"Parent:FavoriteNumber" |
7 |
"Parent:Child:Name" |
"Example" |
"Parent:Child:GrandChild:Age" |
3 |
Základní příklad
Pokud chcete získat přístup k hodnotám konfigurace v jejich základní podobě, bez pomoci přístupu obecného hostitele, použijte přímo typ ConfigurationBuilder.
Spropitné
Typ System.Configuration.ConfigurationBuilder se liší od typu Microsoft.Extensions.Configuration.ConfigurationBuilder. Tento obsah se týká balíčků NuGet a oborů názvů specifických pro Microsoft.Extensions.*.
Představte si následující projekt jazyka C#:
<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="9.0.9" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.9" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.9" />
</ItemGroup>
</Project>
Předchozí soubor projektu odkazuje na několik konfiguračních balíčků NuGet:
-
Microsoft.Extensions.Configuration.Binder: Funkce vazby objektu k datům v zprostředkovatelích konfigurace pro
Microsoft.Extensions.Configuration. -
Microsoft.Extensions.Configuration.Json: Implementace zprostředkovatele konfigurace JSON pro
Microsoft.Extensions.Configuration. -
Microsoft.Extensions.Configuration.EnvironmentVariables: Implementace zprostředkovatele konfigurace proměnných prostředí pro
Microsoft.Extensions.Configuration.
Představte si příklad souboru appsettings.json:
{
"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"
]
}
}
Vzhledem k tomuto souboru JSON je tady příklad způsobu spotřeby, který přímo používá tvůrce konfigurace:
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...
Předchozí kód jazyka C#:
- Vytvoří instanci ConfigurationBuilder.
- Přidá
"appsettings.json"soubor, který bude rozpoznán poskytovatelem konfigurace JSON. - Přidá proměnné prostředí, které jsou rozpoznané poskytovatelem konfigurace proměnných prostředí.
- Získá požadovaný oddíl
"Settings"a odpovídající instanciSettingspomocí instanceconfig.
Objekt Settings má tvar následujícím způsobem:
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!;
}
Základní příklad s hostování
Pokud chcete získat přístup k hodnotě IConfiguration, můžete znovu spoléhat na balíček NuGet Microsoft.Extensions.Hosting. Vytvořte novou konzolovou aplikaci a vložte do ní následující obsah souboru projektu:
<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="9.0.9" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.9" />
</ItemGroup>
</Project>
Předchozí soubor projektu definuje, že:
- Aplikace je spustitelný soubor.
- Při kompilaci projektu se do výstupního adresáře zkopíruje soubor appsettings.json.
- Přidá se odkaz na balíček NuGet
Microsoft.Extensions.Hosting.
Do kořenového adresáře projektu přidejte soubor appsettings.json s následujícím obsahem:
{
"KeyOne": 1,
"KeyTwo": true,
"KeyThree": {
"Message": "Thanks for checking this out!"
}
}
Obsah souboru Program.cs nahraďte následujícím kódem jazyka C#:
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!
Při spuštění této aplikace Host.CreateApplicationBuilder definuje chování zjišťování konfigurace JSON a jeho zveřejnění prostřednictvím instance IConfiguration. Z instance host můžete požádat poskytovatele služeb o instanci IConfiguration a pak ji požádat o hodnoty.
Spropitné
Použití nezpracované instance IConfiguration tímto způsobem, i když je to pohodlné, se neškáluje příliš dobře. Když se aplikace zvětšují a jejich odpovídající konfigurace jsou složitější, doporučujeme použít vzor možností jako alternativu.
Základní příklad s hostováním a používáním rozhraní API indexeru
Vezměte v úvahu stejný obsah souboru appsettings.json z předchozího příkladu:
{
"SupportedVersions": {
"v1": "1.0.0",
"v3": "3.0.7"
},
"IPAddressRange": [
"46.36.198.123",
"46.36.198.124",
"46.36.198.125"
]
}
Obsah souboru Program.cs nahraďte následujícím kódem jazyka C#:
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
K hodnotám se přistupuje pomocí rozhraní API indexeru, kde každý klíč je řetězec a hodnota je řetězec. Konfigurace podporuje vlastnosti, objekty, pole a slovníky.
Zprostředkovatelé konfigurace
Následující tabulka ukazuje poskytovatele konfigurace, kteří jsou k dispozici pro aplikace .NET Core.
| Poskytovatel | Poskytuje konfiguraci z |
|---|---|
| Azure poskytovatel konfigurace aplikace | Azure App Configuration |
| poskytovatele konfigurace služby Azure Key Vault | Azure Key Vault |
| Poskytovatel konfigurace příkazového řádku | Parametry příkazového řádku |
| poskytovatel vlastního nastavení konfigurace | Vlastní zdroj |
| Poskytovatel konfigurace proměnných prostředí | Proměnné prostředí |
| Poskytovatel konfigurace souborů | Soubory JSON, XML a INI |
| Poskytovatel konfigurace klíč na soubor | Soubory adresářů |
| poskytovatel konfigurace paměti | Kolekce v paměti |
| Tajné údaje aplikace (Správce tajných údajů) | Soubor v adresáři profilu uživatele |
Spropitné
Záleží na pořadí, ve kterém jsou poskytovatelé konfigurace přidáni. Pokud se používá více zprostředkovatelů konfigurace a více než jeden zprostředkovatel určuje stejný klíč, použije se poslední přidaný klíč.
Další informace o různých poskytovatelích konfigurace naleznete v tématu Konfigurační zprostředkovatelé v rozhraní .NET.
Viz také
- Poskytovatelé konfigurace v .NET
- Implementace vlastního poskytovatele konfigurace
- Chyby konfigurace by měly být vytvořeny v úložišti github.com/dotnet/runtime.
- Konfigurace v ASP.NET Core