Proč se nám může NConfig hodit
Přijdete ráno do práce, zvolíte ve Visual Studiu Get Latest Version nad celým projektem (řešením) a jdete si uvařit kafe. Pokračujete v implementaci nové funkcionality a spouštíte testy nad databází. Začaly se však objevovat chyby, které jsou hodně podezřelé. Vypadá to jako by v příslušné databázi nebyly struktury, které jste si vytvořili nově v rámci vývoje. Pátráte, jak je to možné a ztrácíte drahocené minuty. Když už začínáte být trochu zoufalí, uvědomíte si, že jste si aktualizovali lokální workspace. Podíváte se do konfiguračního souboru a zjistíte, že někdo změnil směrování na databázi! V historii změn zjistíte, že to byl Peter. V duchu si zanadáváte a zároveň si uvědomíte, že už jste párkrát udělali kolegům to samé. Omylem jste dali vrácení změn na server (Check-in) ve společném konfiguračním souboru (Web.config, App.config). Pokud však máte systémový přístup k řešení problémů, pokusíte se toto neustálé přepisování nějak elegantně vyřešit.
A možná by Vám mohl pomoci NConfig!
Jak získat NConfig
NConfig je .Net knihovna, jejíž použití ve Vašich projektech není nijak licenčně omezeno. Projekt je vyvíjen na serveru GitHub na adrese https://github.com/Yegoroff/NConfig.
Já jsem postupoval tak, že jsem si přes odkaz Download stáhnul celý adresář jako zip soubor.
Následně jsem jej rozbalil, otevřel solution NConfig.sln
a sestavil z projektu NConfig výslednou dll knihovnu ve verzi pro framework 4.0
(k dispozici je i projekt pro framework 3.5). Dále jsem již pracoval pouze s dll knihovnou.
Co NConfig umí
NConfig umí slučovat konfigurace z více konfigračních souborů. Umí také za běhu vybrat konfigurační soubor podle názvu aktuálního počítače. Tato funkcionalita je řešením pro výše uvedený motivační případ.
// Sloučí nastavení defaultního konfiguračního souboru a
// Configs\Custom.config, resp. Configs\{NazevPocitace}.Custom.config
NConfigurator.UsingFiles(@"Configs\Custom.config").SetAsSystemDefault();
Autor tvrdí, že NConfig lze využít v aplikacích typu ASP.Net, ASP.Net MVC, WinServies, WinForms, WPF a konzolová aplikace.
Ukázka použití
Požadujeme, aby si vývojáři Peter a Steve mohli nastavit navzájem nezávislé lokální konfigurace pro připojení k databázím tak, aby nezasahovali do společného konfiguračního souboru.
Vytvoříme si jednoduchou konzolovou aplikaci a nareferencujeme NConfig.dll
. Přidáme standardní App.config
. Uživatelské konfigurační soubory umístíme do složky Configs
.
Ve složce vytvoříme defaultní Custom.config
a konfigurační soubory pro Petera a Steva - PeterComputer.Custom.config
a SteveComputer.Custom.config
. Viz. obrázek.
Nezapomeňte nastavit pro konfigurační soubory ve složce Configs
vlastnost Copy To Output Directory na true.
Soubor App.config
vypadá takto:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="Database" value="AppDatabase"/>
<add key="User" value="AppUser"/>
</appSettings>
</configuration>
Soubor Custom.config
vypadá takto:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="User" value="CustomUser"/>
</appSettings>
</configuration>
A například soubor PeterComputer.Custom.config
vypadá takto:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="Database" value="PeterComputerDatabase"/>
<add key="User" value="PeterComputerUser"/>
</appSettings>
</configuration>
Třída Program konzolové aplikace využije volání metody UsingFiles() třídy NConfig.NConfigurator,
která sloučí původní App.config
s Configs\Custom.config
, případně s konfiguračními soubory podle spuštěného počítače:
class Program
{
static void Main(string[] args)
{
// SwitchOnCustomConfig();
Console.WriteLine(String.Format("User='{0}'", ConfigurationManager.AppSettings["User"]));
Console.WriteLine(String.Format("Database='{0}'", ConfigurationManager.AppSettings["Database"]));
}
static void SwitchOnCustomConfig()
{
NConfigurator.UsingFiles(@"Configs\Custom.config").SetAsSystemDefault();
}
}
Přehled scénářů:
Scénář | Konfigurační soubor | Hodnota klíče Database | Hodnota klíče User |
---|---|---|---|
Není zapnutá podpora volitelných konfiguračních souborů - nevolá se metoda SwitchOnCustomConfig(). | App.config | AppDatabase | AppUser |
Je zapnutá podpora volitelných konfiguračních souborů - volá se metoda SwitchOnCustomConfig() a aplikace není spuštěna ani na počítači Petera ani Steva. | Custom.config | AppDatabase | CustomUser |
Je zapnutá podpora volitelných konfiguračních souborů - volá se metoda SwitchOnCustomConfig() a aplikace je spuštěna na počítači Petera. | PeterComputer.Custom.config | PeterComputerDatabase | PeterComputerUser |
Žádné komentáře:
Okomentovat