Alkalmazásbeállítások architektúrája
Ez a témakör az Alkalmazásbeállítások architektúra működését ismerteti, és az architektúra speciális funkcióit, például a csoportosított beállításokat és a beállításkulcsokat ismerteti.
Az alkalmazásbeállítások architektúrája támogatja az erősen gépelt beállítások definiálását az alkalmazás- vagy felhasználói hatókörrel, és megőrzi a beállításokat az alkalmazás munkamenetei között. Az architektúra egy alapértelmezett adatmegőrzési motort biztosít a beállítások mentéséhez és a helyi fájlrendszerből való betöltéséhez. Az architektúra emellett az egyéni adatmegőrzési motor biztosításához szükséges interfészeket is meghatározza.
Olyan interfészek állnak rendelkezésre, amelyek lehetővé teszik az egyéni összetevők számára, hogy megőrizzék a saját beállításait, amikor egy alkalmazásban üzemeltetik őket. A beállításkulcsok használatával az összetevők külön tárolhatják az összetevő több példányának beállításait.
Az alkalmazásbeállítások architektúrája a ASP.NET és a Windows Formsban is használható, és számos alaposztályt tartalmaz, amelyek mindkét környezetben meg vannak osztva. A legfontosabb a SettingsBase, amely hozzáférést biztosít a beállításokhoz egy gyűjteményen keresztül, és alacsony szintű módszereket biztosít a beállítások betöltéséhez és mentéséhez. Minden környezet a SettingsBase származó saját osztályát implementálja, hogy további beállításokat biztosítson az adott környezethez. Windows Forms-alapú alkalmazásokban az összes alkalmazásbeállítást egy ApplicationSettingsBase osztályból származó osztályon kell meghatározni, amely a következő funkciókat adja hozzá az alaposztályhoz:
Magasabb szintű betöltési és mentési műveletek
Felhasználói hatókörű beállítások támogatása
Felhasználó beállításainak visszaállítása az előre definiált alapértelmezett értékekre
Beállítások frissítése egy korábbi alkalmazásverzióról
Beállítások érvényesítése a módosítások előtt vagy a mentés előtt
A beállítások a System.Configuration névtérben meghatározott számos attribútummal írhatók le; ezeket alkalmazásbeállítások attribútumaiismertetik. Amikor meghatároz egy beállítást, azt ApplicationScopedSettingAttribute vagy UserScopedSettingAttributekell alkalmaznia, amely leírja, hogy a beállítás a teljes alkalmazásra vagy csak az aktuális felhasználóra vonatkozik-e.
Az alábbi példakód egy egyéni beállításosztályt határoz meg egyetlen beállítással, 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
A ApplicationSettingsBase osztály maga nem őriz meg vagy tölt be beállításokat; ez a feladat a beállításszolgáltatóhoz tartozik, amely a SettingsProviderszármazik. Ha a ApplicationSettingsBase származtatott osztálya nem ad meg beállításszolgáltatót a SettingsProviderAttributekeresztül, akkor a rendszer az alapértelmezett LocalFileSettingsProviderszolgáltatót használja.
Az eredetileg a .NET-keretrendszerrel kiadott konfigurációs rendszer támogatja a statikus alkalmazáskonfigurációs adatok biztosítását a helyi számítógép machine.config fájlján keresztül, vagy egy app.
exe.config fájlon belül, amelyet az alkalmazással telepít. A LocalFileSettingsProvider osztály a következő módokon bővíti ki ezt a natív támogatást:
Az alkalmazás hatókörébe tartozó beállítások a machine.config vagy
app.
exe.config fájlokban tárolhatók. Machine.config mindig írásvédett, míg aapp
.exe.config a legtöbb alkalmazás esetén biztonsági megfontolások miatt írásvédett.A felhasználó által hatókörbe tartozó beállítások
app
.exe.config fájlokban tárolhatók, ebben az esetben a rendszer statikus alapértelmezettként kezeli őket.Nem alapértelmezett felhasználói hatókörű beállítások új fájlban vannak tárolva, user.config. Egy felhasználói hatókörű beállítás alapértelmezettjét megadhatja a DefaultSettingValueAttributesegítségével. Mivel a felhasználói hatókörű beállítások gyakran változnak az alkalmazás végrehajtása során, user.config mindig olvasható/írható. További információ: Hol vannak tárolva a felhasználói hatókörű beállítások.
Mindhárom konfigurációs fájl XML formátumban tárolja a beállításokat. Az alkalmazás hatókörébe tartozó beállítások legfelső szintű XML-eleme a <appSettings>
, míg a <userSettings>
a felhasználó hatókörébe tartozó beállításokhoz használatos. Egy app
.exe.config fájl, amely az alkalmazás hatókörébe tartozó beállításokat és a felhasználói hatókörű beállítások alapértelmezett beállításait is tartalmazza, a következőképpen nézne ki:
<?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>
A konfigurációs fájl alkalmazásbeállítások szakaszában található elemek definícióját Alkalmazásbeállítások sémacímű témakörben találja.
Az alkalmazásbeállítások a Windows Forms adatkötési architektúráját használják a beállításfrissítések kétirányú kommunikációjára a beállításobjektum és az összetevők között. Ha a Visual Studio használatával hoz létre alkalmazásbeállításokat, és hozzárendeli őket az összetevők tulajdonságaihoz, ezek a kötések automatikusan létrejönnek.
Az alkalmazásbeállításokat csak olyan összetevőhöz kötheti, amely támogatja a IBindableComponent felületet. Az összetevőnek emellett egy adott kötött tulajdonság változási eseményét is implementálnia kell, vagy értesítenie kell az alkalmazás beállításait arról, hogy a tulajdonság megváltozott a INotifyPropertyChanged felületen keresztül. Ha az összetevő nem implementálja a IBindableComponent, és a Visual Studióban kötést végez, a kötött tulajdonságok első alkalommal lesznek beállítva, de nem frissülnek. Ha az összetevő implementálja IBindableComponent, de nem támogatja a tulajdonságmódosítási értesítéseket, a kötés nem frissül a beállításfájlban a tulajdonság módosításakor.
Egyes Windows Forms-összetevők, például ToolStripItem, nem támogatják a beállításkötéseket.
Amikor LocalFileSettingsProvider lemezre kell mentenie a beállításokat, a következő műveleteket hajtja végre:
Reflexiót alkalmazva vizsgálja meg a ApplicationSettingsBase származtatott osztályban definiált összes tulajdonságot, és megkeresi azokat, amelyekre ApplicationScopedSettingAttribute vagy UserScopedSettingAttributevonatkozik.
Szerializálja a tulajdonságot lemezre. Először megpróbálja meghívni a(z) ConvertToString-t vagy ConvertFromString-et a típus társított TypeConverter-én. Ha ez nem sikerül, ehelyett XML-szerializálást használ.
A beállítás attribútuma alapján meghatározza, hogy mely beállítások melyik fájlba kerülnek.
Ha saját beállításosztályt implementál, a SettingsSerializeAsAttribute segítségével megjelölhet egy beállítást bináris vagy egyéni szerializáláshoz a SettingsSerializeAs enumerálással. További információ a saját beállításosztály kódban való létrehozásáról: Útmutató: Alkalmazásbeállítások létrehozása.
A app
.exe.config és felhasználói.config fájlok helye az alkalmazás telepítésétől függően eltérő lesz. A helyi számítógépre másolt Windows Forms-alapú alkalmazások esetében app
.exe.config ugyanabban a könyvtárban lesznek, mint az alkalmazás fő végrehajtható fájljának alapkönyvtára, és felhasználói.config a Application.LocalUserAppDataPath tulajdonság által megadott helyen lesznek. A ClickOnce használatával telepített alkalmazások esetében mindkét fájl a ClickOnce Adatkönyvtárban található, %InstallRoot%\Dokumentumok és beállítások\felhasználónév\Helyi beállítások alatt.
Az ezen fájlok tárolási helye kissé eltérő, ha a felhasználó engedélyezte a lebegő profilokat, ami lehetővé teszi, hogy különböző Windows- és alkalmazásbeállításokat adjon meg, amikor más számítógépeket használ egy tartományban. Ebben az esetben a ClickOnce-alkalmazások és a nem ClickOnce-alkalmazások is rendelkeznek a app
.exe.config és felhasználói.config %InstallRoot%\Documents and Settings\felhasználónév\Application Data mappában tárolt fájlokkal.
Az alkalmazásbeállítások funkció új üzembehelyezési technológiával való működéséről további információt ClickOnce és Alkalmazásbeállításokcímű témakörben talál. További információ a ClickOnce Data Directoryról: Helyi és távoli adatok elérése a ClickOnce-alkalmazásokban.
Az alkalmazásbeállítások úgy vannak kialakítva, hogy részleges megbízhatósági környezetben működjenek, egy korlátozott környezetben, amely az interneten vagy intraneten üzemeltetett Windows Forms-alkalmazások alapértelmezett környezete. A részleges megbízhatóságon túl nincs szükség különleges engedélyekre az alkalmazásbeállítások alapértelmezett beállításszolgáltatóval való használatához.
Amikor egy ClickOnce-alkalmazásban alkalmazásbeállításokat használ, a user
.config fájl a ClickOnce adatkönyvtárban lesz tárolva. Az alkalmazás user
.config fájljának mérete nem haladhatja meg a ClickOnce által beállított adatkönyvtár-kvótát. További információ: ClickOnce és alkalmazásbeállítások.
Az Alkalmazásbeállítások architektúrájában laza kapcsolat van az alkalmazásbeállítások burkolóosztálya, amely a ApplicationSettingsBase-ból származik, és a társított beállításszolgáltató vagy -szolgáltatók között, amelyek a SettingsProvider-től származnak. Ezt a társítás csak a burkolóosztályra vagy annak egyedi tulajdonságaira alkalmazott SettingsProviderAttribute határozza meg. Ha nincs explicit módon megadva beállításszolgáltató, a rendszer az alapértelmezett LocalFileSettingsProviderszolgáltatót használja. Ennek eredményeképpen ez az architektúra támogatja az egyéni beállításszolgáltatók létrehozását és használatát.
Tegyük fel például, hogy a SqlSettingsProvider
olyan szolgáltatót szeretne fejleszteni és használni, amely az összes beállítási adatot egy Microsoft SQL Server-adatbázisban tárolja. A SettingsProvider-származtatott osztály a Initialize
metódusában System.Collections.Specialized.NameValueCollectiontípusú paraméterként kapja meg ezt az információt. Ezután implementálná a GetPropertyValues metódust, amellyel lekérheti a beállításokat az adattárból, és SetPropertyValues menteni őket. A szolgáltató a rendelkezésre bocsátott SettingsPropertyCollection-t használhatja a GetPropertyValues nevének, típusának és hatókörének, valamint a tulajdonsághoz meghatározott egyéb beállítási attribútumok meghatározásához.
A szolgáltatónak egy tulajdonságot és egy olyan módszert kell implementálnia, amelynek implementációi nem feltétlenül egyértelműek. A ApplicationName tulajdonság a SettingsProviderabsztrakt tulajdonsága; programoznia kell úgy, hogy a következőt adja vissza:
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
A származtatott osztálynak egy olyan Initialize
metódust is végre kell hajtania, amely nem vesz fel argumentumokat, és nem ad vissza értéket. Ezt a módszert nem a SettingsProviderhatározza meg.
Végül implementálja a IApplicationSettingsProvider a szolgáltatóján, hogy támogassa a beállítások frissítését, a beállítások alapértelmezett értékre való visszaállítását, valamint a beállítások egyik alkalmazásverzióról a másikra való frissítését.
Miután implementálta és lefordította a szolgáltatót, meg kell adnia a beállításosztálynak, hogy az alapértelmezett helyett ezt a szolgáltatót használja. Ezt a SettingsProviderAttributekeresztül hajthatja végre. Ha egy teljes beállításosztályra van alkalmazva, a szolgáltatót az osztály által definiált összes beállításhoz használja a rendszer; ha az egyes beállításokra van alkalmazva, az Alkalmazásbeállítások architektúra csak ezekhez a beállításokhoz használja ezt a szolgáltatót, a többihez pedig LocalFileSettingsProvider. Az alábbi példakód bemutatja, hogyan utasíthatja a beállításosztályt az egyéni szolgáltató használatára.
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
Előfordulhat, hogy egy szolgáltató egyszerre több szálból is meghívható, de mindig ugyanarra a tárolóhelyre fog írni; Ezért az Alkalmazásbeállítások architektúra csak a szolgáltatói osztály egyetlen példányát fogja példányosítani.
Fontos
Győződjön meg arról, hogy a szolgáltató szálbiztos, és egyszerre csak egy szál írását engedélyezi a konfigurációs fájlokba.
A szolgáltatónak nem kell támogatnia a System.Configuration névtérben definiált összes beállításattribútumot, de legalább támogatnia kell ApplicationScopedSettingAttribute és UserScopedSettingAttribute, és támogatnia kell a DefaultSettingValueAttribute. Azoknál az attribútumoknál, amelyeket nem támogat, a szolgáltatónak értesítés nélkül kell meghibásodnia; nem szabad kivételt dobnia. Ha a beállításosztály az attribútumok érvénytelen kombinációját használja, azonban – például ApplicationScopedSettingAttribute és UserScopedSettingAttribute ugyanarra a beállításra – a szolgáltatónak kivételt kell kivennie, és meg kell szüntetnie a műveletet.
.NET Desktop feedback-visszajelzés
A(z) .NET Desktop feedback egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: