Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatTento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Konfigurace v .NET se provádí pomocí jednoho nebo více zprostředkovatelů konfigurace. Poskytovatelé konfigurace čtou konfigurační data z párů klíč-hodnota pomocí různých zdrojů konfigurace:
Poznámka
Informace o konfiguraci samotného modulu runtime .NET naleznete v tématu Nastavení konfigurace modulu runtime .NET.
Vzhledem k jednomu nebo více zdrojům IConfiguration konfigurace poskytuje typ 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:
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řidejte odkaz na balíček Microsoft.Extensions.Configuration. Tento balíček je základem konfigurace v aplikacích .NET. Poskytuje typy 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:
SomeKey
klíče do 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 .NET.
Vaše aplikace obvykle dělají víc než jen konfiguraci čtení. Pravděpodobně budou používat injektáž závislostí, protokolování a další služby. Pro aplikace, které tyto služby používají, se doporučuje přístup k obecnému hostiteli .NET. Místo toho zvažte přidání odkazu na balíček 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:
Development
.Environment
. Json s použitím zprostředkovatele konfigurace JSON Například nastavení aplikace.Produkce.json a appsettings.Vývoj.json.IConfiguration
jako zdroj.Přidání zprostředkovatele konfigurace přepíše předchozí hodnoty konfigurace. Například zprostředkovatel konfigurace příkazového řádku přepíše všechny hodnoty od ostatních zprostředkovatelů, protože je přidán jako poslední. Pokud SomeKey
je nastavena v appsettings.json i prostředí, použije se hodnota prostředí, protože byla přidána po appsettings.json.
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 zprostředkovatel konfigurace JSON lze použít k mapování appsettings.json souborů na objekty .NET a používá se s injektáží závislostí. To umožňuje vzor možností, který používá třídy k poskytování přístupu silného typu ke skupinám souvisejících nastavení. Konfigurace .NET poskytuje různé abstrakce. Zvažte následující rozhraní:
IConfiguration
hierarchie.Tyto abstrakce jsou nezávislé na příslušném poskytovateli konfigurace (IConfigurationProvider). Jinými slovy můžete použít IConfiguration
instanci 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:
Poznámka
Pořadač má několik omezení:
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:
Key | Hodnota |
---|---|
"Parent:FavoriteNumber" |
7 |
"Parent:Child:Name" |
"Example" |
"Parent:Child:GrandChild:Age" |
3 |
Pokud chcete získat přístup k hodnotám konfigurace v jejich základní podobě bez pomoci obecného přístupu k hostiteli , použijte ConfigurationBuilder tento typ přímo.
Tip
Typ System.Configuration.ConfigurationBuilder se liší od Microsoft.Extensions.Configuration.ConfigurationBuilder typu. Veškerý tento obsah je specifický pro Microsoft.Extensions.*
balíčky NuGet a obory názvů.
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="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>
Předchozí soubor projektu odkazuje na několik konfiguračních balíčků NuGet:
Microsoft.Extensions.Configuration
.Microsoft.Extensions.Configuration
.Microsoft.Extensions.Configuration
.Podívejte se na 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#:
"appsettings.json"
Přidá soubor, který bude rozpoznán poskytovatelem konfigurace JSON."Settings"
oddíl a odpovídající Settings
instanci pomocí config
instance.Objekt Settings
je tvarován 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!;
}
Pokud chcete získat přístup k hodnotě IConfiguration
, můžete znovu spoléhat na Microsoft.Extensions.Hosting
balíček NuGet. 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="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Předchozí soubor projektu definuje, že:
Microsoft.Extensions.Hosting
balíček NuGet.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 její zveřejnění prostřednictvím IConfiguration
instance. host
Z instance můžete požádat poskytovatele služeb o IConfiguration
instanci a pak požádat o hodnoty.
Tip
Použití nezpracované IConfiguration
instance tímto způsobem, i když je to praktické, není velmi dobře škálovatelné. Když se aplikace zvětšují a jejich odpovídající konfigurace jsou složitější, doporučujeme jako alternativu použít vzor možností.
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.
Následující tabulka ukazuje poskytovatele konfigurace, kteří jsou k dispozici pro aplikace .NET Core.
Poskytovatel | Poskytuje konfiguraci z |
---|---|
Zprostředkovatel konfigurace Azure App | Azure App Configuration |
Zprostředkovatel konfigurace služby Azure Key Vault | Azure Key Vault |
Zprostředkovatel konfigurace v příkazovém řádku | Parametry příkazového řádku |
Vlastní zprostředkovatel konfigurace | Vlastní zdroj |
Zprostředkovatel konfigurace pro proměnné prostředí | Proměnné prostředí |
Zprostředkovatel konfigurace v souboru | Soubory JSON, XML a INI |
Zprostředkovatele konfigurace „klíč na soubor“ | Soubory adresáře |
Zprostředkovatel konfigurace v paměti | Kolekce v paměti |
Tajné kódy aplikací (Secret Manager) | Soubor v adresáři profilu uživatele |
Tip
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 Poskytovatelé konfigurace v .NET.
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Události
Vytváření inteligentních aplikací
17. 3. 21 - 21. 3. 10
Připojte se k řadě meetupů a vytvořte škálovatelná řešení AI založená na skutečných případech použití s kolegy vývojáři a odborníky.
ZaregistrovatŠkolení