ASP.NET Core jako první integroval náhradu tradiční XML konfigurace v .NETu přes App.config
a Web.config
, kterou jsme používali od… prakticky odjakživa. Moderní konfigurační systém Microsoft.Extensions.Configuration.*
je snadno rozšiřitelný a flexibilní. A protože nemá žádnou závislost na ASP.NET Core, lze jej snadno použít v jakékoliv .NET aplikaci! V tomto článku si ukážeme, jak zprovoznit JSON konfiguraci přes appsettings.json
v UWP.
Instalace NuGet balíčků
Všechny knihovny pro novou konfiguraci jsou k dispozici na NuGetu. Pro naše potřeby stačí následující dva balíčky:
Verze 3.x těchto balíčků popdoruje .NET Standard 2.0.
Nastavení konfigurace
Abychom měli konfigurační logiku pohromadě, vytvoříme si třídu AppConfig
. V jejím konstruktoru potřebujeme nastavit konfigurační pipeline. Protože je JSON soubor dodáván spolu s aplikací, nastavíme výchozí cestu pro vyhledávání na Package.Current.InstalledLocation.Path
. Do pipeline pak přidáme appsettings.json
:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private readonly IConfigurationRoot _configurationRoot; | |
public AppConfig() | |
{ | |
var builder = new ConfigurationBuilder() | |
.SetBasePath(Package.Current.InstalledLocation.Path) | |
.AddJsonFile("appsettings.json", optional: false); | |
_configurationRoot = builder.Build(); | |
} |
Nyní do našeho projektu přidáme soubor appsettings.json
. Pro ilustraci do něj přidáme jedno ukázkové nastavení:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"example": { | |
"message" : "Hello from appsettings.json!" | |
} | |
} |
Důležitá poznámka – ujistěte se, že soubor appsettings.json
má svou Build Action nastavenu na Content
a Copy to Output Directory na Copy Always
, aby byl opravdu nakopírován do výstupu. Změny lze provést v okně Properties po výběru souboru v Solution Exploreru:

Načtení konfiguračních sekcí
Aby bylo načítání silně-typových konfiguračních sekcí jednoduché, připravíme si následující pomocnou metodu:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private T GetSection<T>(string key) => _configurationRoot.GetSection(key).Get<T>(); |
Nyní naši ukázkovou sekci pokryjeme jednoduchou třídou:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class Example | |
{ | |
public string Message { get; set; } | |
} |
A vytvoříme vlastnost, kterou konfigurační sekci můžeme přečíst:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public Example Example => GetSection<Example>(nameof(Example)); |
A to je vše! Nyní můžeme snadno použít třídu AppConfig
kdekoliv, kde ji potřebujeme:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var config = new AppConfig(); | |
var contentDialog = new ContentDialog() | |
{ | |
Content = config.Example.Message, | |
CloseButtonText = "OK" | |
}; | |
await contentDialog.ShowAsync(); |
A je to, naše zpráva z konfigurace je zobrazena!

Pokud používáte nějaký MVVM framework s podporou dependency injection, nejlepším způsobem pro použití konfigurace je extrahovat z naší třídy rozhraní a následně používat jeho singleton instanci namísto jejího manuálního vytváření.
Tip navíc
Skvělým plusem moderní konfigurace je možnost mít více zdrojů konfigurace, například soubor appsettings.production.json
, který není uložen v Gitu a který se používá pouze pro Release buildy:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<ItemGroup Condition="'$(Configuration)' == 'Release'"> | |
<Content Include="appsettings.production.json"> | |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> | |
</Content> | |
</ItemGroup> |
Nastavení pipeline by v tomto případě vypadalo takto:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var builder = new ConfigurationBuilder() | |
.SetBasePath(Package.Current.InstalledLocation.Path) | |
.AddJsonFile("appsettings.json", optional: false) | |
.AddJsonFile("appsettings.production.json", optional: true); |
Bohužel, UWP projekty nemohou v tuto chvíli používat nový SDK-styl csproj
a Visual Studio má problém tento “podmíněný” soubor správně zobrazovat/skrývat při přepnutí build konfigurace. I tak lze funkci bez problémů používat.
Zdrojový kód
Ukázkový zdrojový kód k tomuto článku je k dispozici na mém GitHubu.
Shrnutí
Je snadné přidat Microsoft.Extensions.Configuration
do UWP projektu, či obecně – do kteréhokoliv .NET projektu. Viděli jsme, jak lze použít konfiguraci přes JSON ale díky rozšířitelnosti nic nebrání možnosti použít pro konfiguraci i jiné zdroje.