Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A .NET-ben a konfigurálást egy vagy több konfigurációszolgáltatósegítségével végezzük. A konfigurációszolgáltatók különböző konfigurációs források használatával olvassák be a kulcs-érték párok konfigurációs adatait:
- Beállításfájlok, például appsettings.json
- Környezeti változók
- Azure Key Vault
- Azure App Configuration
- Parancssori paraméterek
- Telepített vagy létrehozott egyéni szolgáltatók
- Címtárfájlok
- Memóriabeli .NET-objektumok
- Külső szolgáltatók
Jegyzet
A .NET-futtatókörnyezet konfigurálásával kapcsolatos információkért lásd .NET futtatókörnyezet konfigurációs beállításait.
Fogalmak és absztrakciók
Egy vagy több konfigurációs forrás miatt a IConfiguration típus egységes nézetet biztosít a konfigurációs adatokról. A konfiguráció írásvédett, és a konfigurációs minta nem programozott módon írható. A IConfiguration
felület az összes konfigurációs forrás egyetlen ábrázolása, ahogyan az alábbi ábrán látható:
Konzolalkalmazások konfigurálása
A dotnet új parancssablon vagy a Visual Studio használatával létrehozott .NET-konzolalkalmazások alapértelmezés szerint nem kínálnak konfigurációs lehetőségeket. Ha új .NET-konsole alkalmazásban szeretne konfigurációt hozzáadni, adjon hozzá egy csomaghivatkozástMicrosoft.Extensions.Configuration. Ez a csomag a .NET-alkalmazások konfigurációjának alapja. Ez biztosítja a ConfigurationBuilder és a kapcsolódó típusokat.
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary<string, string?>()
{
["SomeKey"] = "SomeValue"
})
.Build();
Console.WriteLine(configuration["SomeKey"]);
// Outputs:
// SomeValue
Az előző kód:
- Létrehoz egy új ConfigurationBuilder-példányt.
- Kulcs-érték párok memóriabeli gyűjteményét adja hozzá a konfigurációszerkesztőhöz.
- Meghívja a Build() metódust egy IConfiguration-példány létrehozásához.
- A
SomeKey
kulcs értékét írja a konzolra.
Bár ez a példa memórián belüli konfigurációt használ, számos konfigurációszolgáltató érhető el, amelyek a fájlalapú, a környezeti változók, a parancssori argumentumok és más konfigurációs források funkcióit tárják fel. További információ: Konfigurációszolgáltatók a .NET-ben.
Alternatív üzemeltetési megközelítés
Az alkalmazások gyakran nem csak olvasási konfigurációt végeznek. Valószínűleg függőséginjektálást, naplózást és egyéb szolgáltatásokat fognak használni. A .NET Generic Host megközelítés ajánlott azoknak az alkalmazásoknak, amelyek ezeket a szolgáltatásokat használják. Ehelyett fontolja meg egy csomag hivatkozásának hozzáadását a Microsoft.Extensions.Hosting-hez. Módosítsa a Program.cs fájlt a következő kódnak megfelelően:
using Microsoft.Extensions.Hosting;
using IHost host = Host.CreateApplicationBuilder(args).Build();
// Application code should start here.
await host.RunAsync();
A Host.CreateApplicationBuilder(String[]) metódus az alkalmazás alapértelmezett konfigurációját a következő sorrendben biztosítja, a legmagasabbtól a legalacsonyabb prioritásig:
- Parancssori argumentumok a parancssori konfigurációszolgáltatóval.
- Környezeti változók a konfigurációszolgáltatón keresztül.
-
alkalmazás titkai, amikor az alkalmazás a
Development
környezetben fut. - appsettings.json a JSON konfiguráció szolgáltatóhasználatával.
-
alkalmazásbeállításokat.
Environment
.json a JSON-konfigurációszolgáltató használatával. Például appsettings.Éles.json és appsettings.Fejlesztési.json. -
ChainedConfigurationProvider: Meglévő
IConfiguration
-et ad hozzá forrásként.
A konfigurációszolgáltató hozzáadása felülírja a korábbi konfigurációs értékeket. Például a parancssori konfigurációszolgáltató felülbírálja a többi szolgáltató összes értékét, mert az utolsóként van hozzáadva. Ha a SomeKey
be van állítva mind a appsettings.json-ben, mind a környezetben, akkor a környezeti érték kerül használatra, mert a appsettings.jsonután került hozzáadásra.
Kötés
A .NET-konfiguráció absztrakcióinak egyik fő előnye, hogy a konfigurációs értékeket a .NET-objektumok példányaihoz köti. A JSON-konfigurációszolgáltató például felhasználható arra, hogy appsettings.json fájlokat .NET-objektumokra képezzünk le és függőséginjektálással használják. Ez lehetővé teszi a beállításmintát, amely osztályok alkalmazásával biztosít erős típusú hozzáférést a kapcsolódó beállítások csoportjaihoz. Az alapértelmezett kötő reflexióalapú, de létezik egy forrásgenerátor alternatíva, amely könnyen engedélyezhető.
A .NET-konfiguráció különböző absztrakciókat biztosít. Vegye figyelembe a következő felületeket:
- IConfiguration: A kulcs/érték alkalmazás konfigurációs tulajdonságainak halmazát jelöli.
-
IConfigurationRoot: Egy
IConfiguration
hierarchia gyökerét jelöli. - IConfigurationSection: Az alkalmazáskonfigurációs értékek egy szakaszát jelöli.
Ezek az absztrakciók a mögöttes konfigurációszolgáltató (IConfigurationProvider) számára agnosztikusak. Más szóval egy IConfiguration
-példány használatával több szolgáltató bármely konfigurációs értékét elérheti.
A kötőanyag különböző módszerekkel dolgozhatja fel a konfigurációs értékeket:
- Közvetlen deszerializálás (beépített konverterek használatával) primitív típusokhoz.
- Összetett típusok esetén a TypeConverter, ha a típus rendelkezik ilyennel.
- Tulajdonságokkal rendelkező összetett típus tükröződése.
Jegyzet
A kötőanyag néhány korlátozással rendelkezik:
- A tulajdonságok figyelmen kívül lesznek hagyva, ha privát beállítóik vannak, vagy a típusuk nem konvertálható.
- A megfelelő konfigurációs kulcsok nélküli tulajdonságok figyelmen kívül lesznek hagyva.
Kötési hierarchiák
A konfigurációs értékek hierarchikus adatokat tartalmazhatnak. A hierarchikus objektumok a :
elválasztó használatával jelennek meg a konfigurációs kulcsokban. Egy konfigurációs érték eléréséhez használja a :
karaktert a hierarchia elválasztásához. Vegyük például a következő konfigurációs értékeket:
{
"Parent": {
"FavoriteNumber": 7,
"Child": {
"Name": "Example",
"GrandChild": {
"Age": 3
}
}
}
}
Az alábbi táblázat az előző JSON-példához tartozó példakulcsokat és azok megfelelő értékeit jelöli:
Kulcs | Érték |
---|---|
"Parent:FavoriteNumber" |
7 |
"Parent:Child:Name" |
"Example" |
"Parent:Child:GrandChild:Age" |
3 |
Egyszerű példa
Ha alapszintű konfigurációs értékeket szeretne elérni az általános gazdagép megközelítése nélkül, használja a ConfigurationBuilder típust közvetlenül.
Tipp
A System.Configuration.ConfigurationBuilder típus eltér a Microsoft.Extensions.Configuration.ConfigurationBuilder típustól. Minden tartalom a Microsoft.Extensions.*
NuGet-csomagokra és névterekre vonatkozik.
Fontolja meg a következő C#-projektet:
<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.6" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.6" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="9.0.6" />
</ItemGroup>
</Project>
Az előző projektfájl több konfigurációs NuGet-csomagra hivatkozik:
-
Microsoft.Extensions.Configuration.Binder: Az objektumok
Microsoft.Extensions.Configuration
konfigurációszolgáltatók adataihoz való kötésének funkciója. -
Microsoft.Extensions.Configuration.Json: JSON-konfigurációs szolgáltató megvalósítása
Microsoft.Extensions.Configuration
. -
Microsoft.Extensions.Configuration.EnvironmentVariables: Konfigurációszolgáltató implementációja környezeti változókhoz
Microsoft.Extensions.Configuration
.
Vegyünk egy példát appsettings.json fájlra:
{
"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"
]
}
}
A JSON-fájl alapján most íme egy példa fogyasztási minta a konfigurációszerkesztő közvetlen használatával:
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...
Az előző C# kód:
- Példányosít egy ConfigurationBuilder.
- Hozzáadja a JSON-konfigurációszolgáltató által felismerendő
"appsettings.json"
fájlt. - Környezeti változókat ad hozzá, amelyeket a környezeti változók konfigurációszolgáltatója felismer.
- Megkapja a szükséges
"Settings"
szakaszt és a megfelelőSettings
példányt aconfig
-példány használatával.
A Settings
objektum a következőképpen van formázva:
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!;
}
Alapszintű példa üzemeltetéssel
A IConfiguration
érték eléréséhez újra támaszkodhat a Microsoft.Extensions.Hosting
NuGet-csomagra. Hozzon létre egy új konzolalkalmazást, és illessze be a következő projektfájl tartalmát:
<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.6" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.6" />
</ItemGroup>
</Project>
Az előző projektfájl a következőket határozza meg:
- Az alkalmazás végrehajtható.
- A appsettings.json fájlokat a projekt fordításakor a kimeneti könyvtárba kell másolni.
- A rendszer hozzáadja a
Microsoft.Extensions.Hosting
NuGet-csomaghivatkozást.
Adja hozzá a appsettings.json fájlt a projekt gyökeréhez a következő tartalommal:
{
"KeyOne": 1,
"KeyTwo": true,
"KeyThree": {
"Message": "Thanks for checking this out!"
}
}
Cserélje le a Program.cs fájl tartalmát a következő C#-kódra:
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!
Az alkalmazás futtatásakor a Host.CreateApplicationBuilder
határozza meg a JSON-konfiguráció felderítésének és a IConfiguration
-példányon keresztüli elérhetővé ciójának viselkedését. A host
példányból kérheti a szolgáltatótól a IConfiguration
-példányt, majd kérheti az értékeket.
Tipp
Ha így használja a nyers IConfiguration
-példányt, bár kényelmes, nem skálázható túl jól. Amikor az alkalmazások összetettebbé válnak, és a hozzájuk tartozó konfigurációk összetettebbé válnak, javasoljuk, hogy alternatívaként használja a beállításmintát.
Egyszerű példa az indexelő API üzemeltetésére és használatára
Vegye figyelembe az előző példában szereplő appsettings.json fájltartalmat:
{
"SupportedVersions": {
"v1": "1.0.0",
"v3": "3.0.7"
},
"IPAddressRange": [
"46.36.198.123",
"46.36.198.124",
"46.36.198.125"
]
}
Cserélje le a Program.cs fájl tartalmát a következő C#-kódra:
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
Az értékek az indexelő API-val érhetők el, ahol minden kulcs egy sztring, az érték pedig egy sztring. A konfiguráció támogatja a tulajdonságokat, objektumokat, tömböket és szótárakat.
Konfigurációszolgáltatók
Az alábbi táblázat a .NET Core-alkalmazások számára elérhető konfigurációszolgáltatókat mutatja be.
Szolgáltató | Konfigurációt biztosít a |
---|---|
Azure-alkalmazáskonfigurációs szolgáltató | Azure-alkalmazáskonfiguráció |
Azure Key Vault konfiguráció szolgáltató | Azure Key Vault |
parancssori konfigurációszolgáltató | Parancssori paraméterek |
egyéni konfiguráció szolgáltató | Egyéni forrás |
Környezeti változók konfigurációs szolgáltatója | Környezeti változók |
fájlkonfigurációs szolgáltató | JSON-, XML- és INI-fájlok |
fájlonkénti kulcskonfigurációs szolgáltató | Címtárfájlok |
memóriakonfigurációs szolgáltató | Memóriában tárolt gyűjtemények |
alkalmazástitkok (Secret Manager) | Fájl a felhasználói profil könyvtárában |
Tipp
A konfigurációszolgáltatók hozzáadásának sorrendje számít. Ha több konfigurációszolgáltatót használ, és egynél több szolgáltató adja meg ugyanazt a kulcsot, a rendszer az utolsó hozzáadott kulcsot használja.
További információ a különböző konfigurációszolgáltatókról: .NET-konfigurációs szolgáltatók.
Lásd még:
- Konfiguráció-kezelők a .NET-ben
- Egyéni konfigurációszolgáltató implementálása
- Konfigurációs hibákat kell létrehozni a github.com/dotnet/runtime adattárban
- A konfiguráció az ASP.NET Core-ban