Architektura nastavení aplikace
Toto téma popisuje, jak funguje architektura Nastavení aplikace, a zkoumá pokročilé funkce architektury, jako jsou seskupené nastavení a klíče nastavení.
Architektura nastavení aplikace podporuje definování nastavení silného typu s oborem aplikace nebo uživatele a zachování nastavení mezi relacemi aplikace. Architektura poskytuje výchozí modul trvalosti pro ukládání a načítání nastavení z místního systému souborů. Architektura také definuje rozhraní pro poskytování vlastního modulu trvalosti.
Rozhraní jsou poskytována, která umožňují vlastním komponentám zachovat vlastní nastavení, když jsou hostované v aplikaci. Pomocí klíčů nastavení můžou komponenty uchovávat nastavení pro více instancí komponenty oddělené.
Definování Nastavení
Architektura nastavení aplikace se používá v rámci ASP.NET i model Windows Forms a obsahuje řadu základních tříd, které jsou sdíleny v obou prostředích. Nejdůležitější je SettingsBase, který poskytuje přístup k nastavení prostřednictvím kolekce a poskytuje metody nízké úrovně pro načítání a ukládání nastavení. Každé prostředí implementuje vlastní třídu odvozenou z SettingsBase toho, aby poskytovala další funkce nastavení pro dané prostředí. V aplikaci založené na model Windows Forms musí být všechna nastavení aplikace definována na třídě odvozené z ApplicationSettingsBase třídy, která přidává do základní třídy následující funkce:
Operace načítání a ukládání na vyšší úrovni
Podpora nastavení s vymezeným uživatelem
Vrácení nastavení uživatele k předdefinovaným výchozím nastavením
Upgrade nastavení z předchozí verze aplikace
Ověřování nastavení, a to buď před jejich změnou, nebo před jejich uložením
Nastavení lze popsat pomocí řady atributů definovaných v rámci System.Configuration oboru názvů. Jsou popsány v atributech Nastavení aplikace. Když definujete nastavení, musíte ho použít buď ApplicationScopedSettingAttribute nebo UserScopedSettingAttribute, který popisuje, jestli se nastavení vztahuje na celou aplikaci, nebo pouze na aktuálního uživatele.
Následující příklad kódu definuje vlastní třídu nastavení s jedním nastavením, BackgroundColor
.
using System;
using System.Configuration;
using System.Drawing;
public class MyUserSettings : ApplicationSettingsBase
{
[UserScopedSetting()]
[DefaultSettingValue("white")]
public Color BackgroundColor
{
get
{
return ((Color)this["BackgroundColor"]);
}
set
{
this["BackgroundColor"] = (Color)value;
}
}
}
Imports System.Configuration
Public Class MyUserSettings
Inherits ApplicationSettingsBase
<UserScopedSetting()> _
<DefaultSettingValue("white")> _
Public Property BackgroundColor() As Color
Get
BackgroundColor = Me("BackgroundColor")
End Get
Set(ByVal value As Color)
Me("BackgroundColor") = value
End Set
End Property
End Class
trvalost Nastavení
Třída ApplicationSettingsBase sama o sobě neuchovává nebo nenačítá nastavení; tato úloha spadá do zprostředkovatele nastavení, třídy, která je odvozena z SettingsProvider. Pokud odvozená třída ApplicationSettingsBase neurčí zprostředkovatele nastavení prostřednictvím SettingsProviderAttribute, pak se použije výchozí zprostředkovatel, LocalFileSettingsProvider.
Konfigurační systém, který byl původně vydán s rozhraním .NET Framework, podporuje poskytování konfiguračních dat statických aplikací prostřednictvím souboru machine.config místního počítače nebo v app.
souboru exe.config, který nasadíte ve své aplikaci. Třída LocalFileSettingsProvider rozšiřuje tuto nativní podporu následujícími způsoby:
Nastavení s oborem aplikace lze uložit buď v souborech machine.config, nebo
app.
exe.config. Machine.config je vždy jen pro čtení, zatímcoapp
.exe.config je omezen bezpečnostními aspekty jen pro čtení pro většinu aplikací.Uživatelsky vymezená nastavení mohou být uložena v
app
souborech .exe.config, v takovém případě jsou považovány za statické výchozí hodnoty.Jiná než výchozí nastavení s oborem uživatele se ukládají do nového souboru user.config. Pro nastavení s oborem uživatele můžete zadat výchozí hodnotu pomocí DefaultSettingValueAttributeparametru . Vzhledem k tomu, že se nastavení v oboru uživatele často mění během provádění aplikace, user.config je vždy pro čtení a zápis. Další informace naleznete v tématu Kde jsou uložena nastavení v oboru uživatele.
Všechny tři konfigurační soubory ukládají nastavení ve formátu XML. Element XML nejvyšší úrovně pro nastavení s oborem aplikace je <appSettings>
, zatímco <userSettings>
se používá pro nastavení v oboru uživatele. Soubor app
.exe.config, který obsahuje nastavení s oborem aplikace i výchozí hodnoty pro nastavení s oborem uživatele, by vypadal takto:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WindowsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" />
</sectionGroup>
</configSections>
<applicationSettings>
<WindowsApplication1.Properties.Settings>
<setting name="Cursor" serializeAs="String">
<value>Default</value>
</setting>
<setting name="DoubleBuffering" serializeAs="String">
<value>False</value>
</setting>
</WindowsApplication1.Properties.Settings>
</applicationSettings>
<userSettings>
<WindowsApplication1.Properties.Settings>
<setting name="FormTitle" serializeAs="String">
<value>Form1</value>
</setting>
<setting name="FormSize" serializeAs="String">
<value>595, 536</value>
</setting>
</WindowsApplication1.Properties.Settings>
</userSettings>
</configuration>
Definici prvků v části nastavení aplikace konfiguračního souboru naleznete v tématu Application Nastavení Schema.
vazby Nastavení
Nastavení aplikace používá architekturu model Windows Forms datových vazeb k zajištění obousměrné komunikace aktualizací nastavení mezi objektem a komponentami nastavení. Pokud pomocí sady Visual Studio vytvoříte nastavení aplikace a přiřadíte je vlastnostem komponenty, tyto vazby se vygenerují automaticky.
Nastavení aplikace můžete svázat pouze s komponentou, která rozhraní podporuje IBindableComponent . Komponenta také musí implementovat událost změny pro určitou vázanou vlastnost nebo upozornit nastavení aplikace, že se vlastnost změnila prostřednictvím INotifyPropertyChanged rozhraní. Pokud komponenta neimplementuje IBindableComponent a vytváříte vazbu prostřednictvím sady Visual Studio, vázané vlastnosti se nastaví poprvé, ale nebudou aktualizovány. Pokud komponenta implementuje IBindableComponent oznámení o změnách vlastností, ale nepodporuje oznámení o změnách vlastností, vazba se při změně vlastnosti v souboru nastavení neaktualizuje.
Některé součásti model Windows Forms, například ToolStripItem, nepodporují vazby nastavení.
serializace Nastavení
Když LocalFileSettingsProvider je nutné uložit nastavení na disk, provede následující akce:
Používá reflexi k prozkoumání všech vlastností definovaných ve vaší ApplicationSettingsBase odvozené třídě, nalezení těch, které jsou použity buď ApplicationScopedSettingAttribute nebo UserScopedSettingAttribute.
Serializuje vlastnost na disk. Nejprve se pokusí volat ConvertToString nebo ConvertFromString na přidruženém TypeConvertertypu . Pokud to neuspěje, použije místo toho serializaci XML.
Určuje, která nastavení se budou na základě atributu nastavení nacházet v souborech.
Pokud implementujete vlastní třídu nastavení, můžete pomocí výčtu SettingsSerializeAsAttributeSettingsSerializeAs označit nastavení pro binární nebo vlastní serializaci. Další informace o vytvoření vlastní třídy nastavení v kódu naleznete v tématu Postupy: Vytvoření aplikace Nastavení.
umístění souborů Nastavení
Umístění app
souborů .exe.config a user.config se bude lišit v závislosti na tom, jak je aplikace nainstalována. V případě model Windows Forms aplikace zkopírované do místního počítače app
se soubor .exe.config nachází ve stejném adresáři jako základní adresář hlavního spustitelného souboru aplikace a soubor user.config se nachází v umístění určeném Application.LocalUserAppDataPath vlastností. Pro aplikaci nainstalovanou pomocí Technologie ClickOnce se oba tyto soubory nacházejí v adresáři dat ClickOnce pod položkou %InstallRoot%\Documents a Nastavení\username\Local Nastavení.
Umístění těchto souborů se mírně liší, pokud uživatel povolil cestovní profily, což uživateli umožňuje definovat různá nastavení systému Windows a aplikace, když používá jiné počítače v rámci domény. V takovém případě budou mít aplikace ClickOnce i aplikace jiné než ClickOnce své app
soubory .exe.config a user.config uložené ve složce %InstallRoot%\Documents a Nastavení\username\Application Data.
Další informace o tom, jak funkce Nastavení aplikace funguje s novou technologií nasazení, naleznete v tématu ClickOnce a application Nastavení. Další informace o ClickOnce Data Directory naleznete v části Přístup k místním a vzdáleným datům v aplikacích ClickOnce.
Nastavení a zabezpečení aplikací
Nastavení aplikace je navržené tak, aby fungovalo v částečném vztahu důvěryhodnosti, omezeném prostředí, které je výchozím nastavením pro model Windows Forms aplikace hostované přes internet nebo intranet. K použití nastavení aplikace s výchozím poskytovatelem nastavení nejsou nutná žádná zvláštní oprávnění nad rámec částečné důvěryhodnosti.
Pokud se nastavení aplikace používá v aplikaci ClickOnce, user
soubor .config je uložen v adresáři dat ClickOnce. Velikost souboru .config aplikace user
nemůže překročit kvótu adresáře dat nastavenou technologií ClickOnce. Další informace naleznete v tématu ClickOnce a aplikace Nastavení.
Vlastní poskytovatelé Nastavení
V architektuře Nastavení aplikace existuje volné spojení mezi třídou obálky nastavení aplikací odvozenou od ApplicationSettingsBasea přidruženým zprostředkovatelem nebo zprostředkovateli nastavení odvozenými z SettingsProvider. Toto přidružení je definováno pouze použitým SettingsProviderAttribute u třídy obálky nebo jeho individuálních vlastností. Pokud není explicitně zadán poskytovatel nastavení, LocalFileSettingsProviderpoužije se výchozí zprostředkovatel. V důsledku toho tato architektura podporuje vytváření a používání zprostředkovatelů vlastních nastavení.
Předpokládejme například, že chcete vyvíjet a používat SqlSettingsProvider
, zprostředkovatel, který bude ukládat všechna data nastavení do databáze Microsoft SQL Serveru. Vaše SettingsProvider-odvozená třída obdrží tyto informace v jeho Initialize
metodě jako parametr typu System.Collections.Specialized.NameValueCollection. Pak byste implementovali metodu GetPropertyValues pro načtení nastavení z úložiště dat a SetPropertyValues jejich uložení. Poskytovatel může pomocí zadaného SettingsPropertyCollectionGetPropertyValues atributu určit název, typ a obor vlastnosti a také všechny další atributy nastavení definované pro tuto vlastnost.
Váš poskytovatel bude muset implementovat jednu vlastnost a jednu metodu, jejíž implementace nemusí být zřejmé. Vlastnost ApplicationName je abstraktní vlastnost SettingsProvider; měli byste ji naprogramovat tak, aby vrátila následující:
public override string ApplicationName
{
get
{
return (System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
}
set
{
// Do nothing.
}
}
Public Overrides Property ApplicationName() As String
Get
ApplicationName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
End Get
Set(ByVal value As String)
' Do nothing.
End Set
End Property
Odvozená třída musí také implementovat metodu Initialize
, která nepřijímá žádné argumenty a nevrací žádnou hodnotu. Tato metoda není definována .SettingsProvider
Nakonec implementujete IApplicationSettingsProvider u svého poskytovatele podporu pro aktualizace nastavení, vrátíte nastavení na výchozí hodnoty a upgradujete nastavení z jedné verze aplikace na jinou.
Jakmile implementujete a zkompilujete svého poskytovatele, musíte dát třídě nastavení pokyn, aby používala tohoto zprostředkovatele místo výchozího nastavení. Toho dosáhnete prostřednictvím SettingsProviderAttribute. Pokud se použije na celou třídu nastavení, poskytovatel se použije pro každé nastavení, které třída definuje; pokud se použije na jednotlivá nastavení, architektura aplikace Nastavení používá tohoto zprostředkovatele pouze pro tato nastavení a používá LocalFileSettingsProvider ho pro zbytek. Následující příklad kódu ukazuje, jak dát třídě nastavení pokyn, aby používal vlastního zprostředkovatele.
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
namespace ApplicationSettingsArchitectureCS
{
[SettingsProvider("SqlSettingsProvider")]
class CustomSettings : ApplicationSettingsBase
{
// Implementation goes here.
}
}
Imports System.Configuration
<SettingsProvider("SqlSettingsProvider")> _
Public Class CustomSettings
Inherits ApplicationSettingsBase
' Implementation goes here.
End Class
Zprostředkovatel může být volán z více vláken současně, ale vždy zapíše do stejného umístění úložiště; proto architektura Nastavení aplikace vytvoří instanci pouze jedné instance vaší třídy zprostředkovatele.
Důležité
Měli byste zajistit, aby váš poskytovatel byl bezpečný pro přístup z více vláken a aby do konfiguračních souborů zapisuje vždy jen jedno vlákno.
Váš poskytovatel nemusí podporovat všechny atributy nastavení definované v System.Configuration oboru názvů, i když musí mít minimální podporu ApplicationScopedSettingAttribute a UserScopedSettingAttributea měl by také podporovat DefaultSettingValueAttribute. U atributů, které nepodporuje, by váš poskytovatel měl pouze selhat bez oznámení; neměl by vyvolat výjimku. Pokud třída nastavení používá neplatnou kombinaci atributů , například použití ApplicationScopedSettingAttribute a UserScopedSettingAttribute stejné nastavení , by váš poskytovatel měl vyvolat výjimku a ukončit operaci.
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro