Olvasás angol nyelven

Megosztás a következőn keresztül:


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.

Beállítások definiálása

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

Beállítások megőrzése

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 a app.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.

Beállítások hozzárendelései

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.

Beállítások szerializálása

Amikor LocalFileSettingsProvider lemezre kell mentenie a beállításokat, a következő műveleteket hajtja végre:

  1. Reflexiót alkalmazva vizsgálja meg a ApplicationSettingsBase származtatott osztályban definiált összes tulajdonságot, és megkeresi azokat, amelyekre ApplicationScopedSettingAttribute vagy UserScopedSettingAttributevonatkozik.

  2. 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.

  3. 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.

Beállítások fájl helyei

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.

Alkalmazásbeállítások és biztonság

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.

Egyéni beállítások szolgáltatói

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 SqlSettingsProviderolyan 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.

Lásd még: