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
:
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í:
{ | |
"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:
private T GetSection<T>(string key) => _configurationRoot.GetSection(key).Get<T>(); |
Nyní naši ukázkovou sekci pokryjeme jednoduchou třídou:
public class Example | |
{ | |
public string Message { get; set; } | |
} |
A vytvoříme vlastnost, kterou konfigurační sekci můžeme přečíst:
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:
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:
<ItemGroup Condition="'$(Configuration)' == 'Release'"> | |
<Content Include="appsettings.production.json"> | |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> | |
</Content> | |
</ItemGroup> |
Nastavení pipeline by v tomto případě vypadalo takto:
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.