Aracılığıyla paylaş


Uygulama Ayarları Mimarisi

Bu konu, Uygulama Ayarlar mimarisinin nasıl çalıştığını açıklar ve mimarinin gruplandırılmış ayarlar ve ayarlar anahtarları gibi gelişmiş özelliklerini inceler.

Uygulama ayarları mimarisi, uygulama veya kullanıcı kapsamıyla kesin olarak yazılan ayarların tanımlanmasını ve ayarların uygulama oturumları arasında kalıcı hale uygulanmasını destekler. Mimari, ayarları yerel dosya sistemine kaydetmek ve yerel dosya sisteminden yüklemek için varsayılan bir kalıcılık altyapısı sağlar. Mimari ayrıca özel bir kalıcılık altyapısı sağlamak için arabirimleri tanımlar.

Özel bileşenlerin bir uygulamada barındırıldığında kendi ayarlarını kalıcı hale getirmek için etkinleştiren arabirimler sağlanır. Ayarlar tuşlarını kullanarak bileşenler, bileşenin birden çok örneğinin ayarlarını ayrı tutabilir.

Ayarlar tanımlama

Uygulama ayarları mimarisi hem ASP.NET hem de Windows Forms içinde kullanılır ve her iki ortamda da paylaşılan bir dizi temel sınıf içerir. En önemlisi, SettingsBasebir koleksiyon aracılığıyla ayarlara erişim sağlayan ve ayarları yüklemek ve kaydetmek için alt düzey yöntemler sağlayan 'dir. Her ortam, bu ortam için ek ayarlar işlevselliği sağlamak üzere kendi SettingsBase sınıfından türetilen sınıfını uygular. Windows Forms tabanlı bir uygulamada, tüm uygulama ayarları sınıfından ApplicationSettingsBase türetilmiş bir sınıfta tanımlanmalıdır ve bu da temel sınıfa aşağıdaki işlevselliği ekler:

  • Daha üst düzey yükleme ve kaydetme işlemleri

  • Kullanıcı kapsamlı ayarlar için destek

  • Kullanıcının ayarlarını önceden tanımlanmış varsayılanlara döndürme

  • Önceki bir uygulama sürümünden ayarları yükseltme

  • Ayarları değiştirmeden veya kaydedilmeden önce doğrulama

Ayarlar, ad alanı içinde System.Configuration tanımlanan bir dizi öznitelik kullanılarak açıklanabilir; bunlar Uygulama Ayarlar Öznitelikleri'nde açıklanmıştır. Bir ayar tanımlarken, ayarın uygulamanın tamamına mı yoksa yalnızca geçerli kullanıcıya mı uygulanacağını açıklayan veya UserScopedSettingAttributeile ApplicationScopedSettingAttribute uygulamanız gerekir.

Aşağıdaki kod örneği, tek bir ayarı BackgroundColorolan özel ayarlar sınıfını tanımlar.

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

kalıcılığı Ayarlar

Sınıfın ApplicationSettingsBase kendisi kalıcı olmaz veya ayarları yüklemez; bu iş, öğesinden SettingsProvidertüretilen bir sınıf olan ayarlar sağlayıcısına düşer. Türetilmiş bir sınıfı ApplicationSettingsBase üzerinden SettingsProviderAttributebir ayar sağlayıcısı belirtmezse, varsayılan sağlayıcı olan LocalFileSettingsProviderkullanılır.

İlk olarak .NET Framework ile yayımlanan yapılandırma sistemi, yerel bilgisayarın machine.config dosyası aracılığıyla veya uygulamanızla dağıttığınız bir app.exe.config dosyası içinde statik uygulama yapılandırma verileri sağlamayı destekler. sınıfı bu LocalFileSettingsProvider yerel desteği aşağıdaki yollarla genişletir:

  • Uygulama kapsamlı ayarlar machine.config veya app.exe.config dosyalarında depolanabilir. Machine.config her zaman salt okunurken app, .exe.config çoğu uygulama için güvenlikle ilgili dikkat edilmesi gerekenler tarafından salt okunur olarak kısıtlanır.

  • Kullanıcı kapsamlı ayarlar .exe.config dosyalarında appdepolanabilir ve bu durumda bunlar statik varsayılanlar olarak değerlendirilir.

  • Varsayılan olmayan kullanıcı kapsamlı ayarlar, user.config adlı yeni bir dosyada depolanır. ile DefaultSettingValueAttributekullanıcı kapsamlı bir ayar için varsayılan değeri belirtebilirsiniz. Kullanıcı kapsamlı ayarlar genellikle uygulama yürütme sırasında değiştiğinden, user.config her zaman okunur/yazılır. Daha fazla bilgi için bkz . Kullanıcı kapsamlı ayarlar nerede depolanır?

Üç yapılandırma dosyası da ayarları XML biçiminde depolar. Uygulama kapsamlı ayarlar için en üst düzey XML öğesi olurken<appSettings><userSettings>, kullanıcı kapsamlı ayarlar için kullanılır. appHem uygulama kapsamlı ayarları hem de kullanıcı kapsamlı ayarların varsayılanlarını içeren bir .exe.config dosyası şöyle görünür:

<?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>

Yapılandırma dosyasının uygulama ayarları bölümündeki öğelerin tanımı için bkz. Uygulama Ayarlar Şeması.

Ayarlar Bağlamaları

Uygulama ayarları, ayarlar nesnesi ve bileşenleri arasında ayarlar güncelleştirmelerinin iki yönlü iletişimini sağlamak için Windows Forms veri bağlama mimarisini kullanır. Uygulama ayarları oluşturmak ve bunları bileşen özelliklerine atamak için Visual Studio kullanırsanız, bu bağlamalar otomatik olarak oluşturulur.

Bir uygulama ayarını yalnızca arabirimi destekleyen bir bileşene IBindableComponent bağlayabilirsiniz. Ayrıca, bileşenin belirli bir ilişkili özellik için bir değişiklik olayı uygulaması veya özelliğin arabirim aracılığıyla değiştirildiğini uygulama ayarlarına bildirmesi INotifyPropertyChanged gerekir. Bileşen uygulanmıyorsa IBindableComponent ve Visual Studio aracılığıyla bağlanıyorsanız, ilişkili özellikler ilk kez ayarlanır, ancak güncelleştirilmez. Bileşen özellik değişikliği bildirimlerini IBindableComponent uygular ancak desteklemezse, özellik değiştirildiğinde bağlama ayarlar dosyasında güncelleştirilmez.

gibi ToolStripItembazı Windows Forms bileşenleri, ayar bağlamalarını desteklemez.

Ayarlar Serileştirme

LocalFileSettingsProvider Ayarları diske kaydetmesi gerektiğinde aşağıdaki eylemleri gerçekleştirir:

  1. Türetilmiş sınıfınızda ApplicationSettingsBase tanımlanan tüm özellikleri incelemek ve ya da ApplicationScopedSettingAttributeUserScopedSettingAttributeile uygulanan özellikleri bulmak için yansımayı kullanır.

  2. Özelliği diske serileştirir. İlk olarak veya öğesini türüyle ilişkili TypeConverterolarak çağırmaya ConvertToStringConvertFromString çalışır. Bu işlem başarılı olmazsa, bunun yerine XML serileştirmesini kullanır.

  3. Ayarın özniteliğine göre hangi ayarların hangi dosyalara gideceğini belirler.

Kendi ayarlar sınıfınızı uygularsanız, sabit listesi kullanarak SettingsSerializeAs ikili veya özel serileştirme için bir ayar işaretlemek için öğesini kullanabilirsinizSettingsSerializeAsAttribute. Kodda kendi ayarlar sınıfınızı oluşturma hakkında daha fazla bilgi için bkz. Nasıl yapılır: Uygulama Ayarlar Oluşturma.

dosya konumlarını Ayarlar

.exe.config ve user.config dosyalarının appkonumu, uygulamanın nasıl yüklendiğine bağlı olarak farklılık gösterir. Yerel bilgisayara kopyalanan Windows Forms tabanlı bir uygulama için.exe.config, appuygulamanın ana yürütülebilir dosyasının temel diziniyle aynı dizinde ve user.config özelliği tarafından Application.LocalUserAppDataPath belirtilen konumda bulunur. ClickOnce yoluyla yüklenen bir uygulama için, bu dosyaların her ikisi de %InstallRoot%\Documents ve Ayarlar\username\Local Ayarlar altındaki ClickOnce Veri Dizininde yer alır.

Bir kullanıcı dolaşım profillerini etkinleştirmişse bu dosyaların depolama konumu biraz farklıdır ve bu da kullanıcının etki alanı içindeki diğer bilgisayarları kullanırken farklı Windows ve uygulama ayarları tanımlamasına olanak tanır. Bu durumda, hem ClickOnce uygulamaları hem de ClickOnce olmayan uygulamaların app.exe.config ve user.config dosyaları %InstallRoot%\Documents ve Ayarlar\username\Application Data altında depolanır.

Application Ayarlar özelliğinin yeni dağıtım teknolojisiyle nasıl çalıştığı hakkında daha fazla bilgi için bkz. ClickOnce ve Application Ayarlar. ClickOnce Veri Dizini hakkında daha fazla bilgi için bkz . ClickOnce Uygulamalarında Yerel ve Uzak Verilere Erişme.

Uygulama Ayarlar ve Güvenlik

Uygulama ayarları, İnternet veya intranet üzerinden barındırılan Windows Forms uygulamaları için varsayılan olan kısıtlı bir ortam olan kısmi güven içinde çalışacak şekilde tasarlanmıştır. Uygulama ayarlarını varsayılan ayarlar sağlayıcısıyla kullanmak için kısmi güven dışında özel izinler gerekmez.

Uygulama ayarları bir ClickOnce uygulamasında kullanıldığında, user.config dosyası ClickOnce veri dizininde depolanır. Uygulamanın user.config dosyasının boyutu ClickOnce tarafından ayarlanan veri dizini kotasını aşamaz. Daha fazla bilgi için bkz. ClickOnce ve Uygulama Ayarlar.

Özel Ayarlar Sağlayıcıları

Uygulama Ayarlar mimarisinde, uygulamasından türetilen uygulama ayarları sarmalayıcı sınıfı ile öğesinden ApplicationSettingsBasetüretilen SettingsProviderilişkili ayarlar sağlayıcısı veya sağlayıcıları arasında gevşek bir bağlantı vardır. Bu ilişki yalnızca sarmalayıcı sınıfına veya tek tek özelliklerine uygulanan tarafından SettingsProviderAttribute tanımlanır. Bir ayar sağlayıcısı açıkça belirtilmezse, varsayılan sağlayıcı olan LocalFileSettingsProviderkullanılır. Sonuç olarak, bu mimari özel ayar sağlayıcıları oluşturmayı ve kullanmayı destekler.

Örneğin, tüm ayarlar verilerini bir Microsoft SQL Server veritabanında depolayacak bir sağlayıcı geliştirmek ve kullanmak SqlSettingsProvideristediğinizi varsayalım. Türetilmiş sınıfınız SettingsProviderbu bilgileri yönteminde Initialize türünde System.Collections.Specialized.NameValueCollectionbir parametre olarak alır. Ardından, ayarlarınızı veri deposundan GetPropertyValues almak ve SetPropertyValues kaydetmek için yöntemini uygulayabilirsiniz. Sağlayıcınız, özelliğin SettingsPropertyCollection adını, türünü ve kapsamını ve bu özellik için tanımlanan diğer ayarlar özniteliklerini belirlemek için sağlanan GetPropertyValues öğesini kullanabilir.

Sağlayıcınız, uygulamaları belirgin olmayan bir özellik ve tek bir yöntem uygulamalı. ApplicationName özelliği soyut bir özelliğidirSettingsProvider; bunu aşağıdakileri döndürecek şekilde programlamanız gerekir:

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

Türetilmiş sınıfınız da bağımsız değişken almamış ve değer döndürmeyen bir Initialize yöntem uygulamalıdır. Bu yöntem tarafından SettingsProvidertanımlanmamıştır.

Son olarak, ayarları yenileme, ayarları varsayılan ayarlarına döndürme ve ayarları bir uygulama sürümünden diğerine yükseltme desteği sağlamak için sağlayıcınıza uygularsınız IApplicationSettingsProvider .

Sağlayıcınızı uyguladıktan ve derledikten sonra, ayarlar sınıfınıza varsayılan sağlayıcı yerine bu sağlayıcıyı kullanma talimatı vermeniz gerekir. Bunu aracılığıyla SettingsProviderAttributegerçekleştirirsiniz. Bir ayarlar sınıfının tamamına uygulanırsa, sağlayıcı sınıfın tanımladığı her ayar için kullanılır; Uygulama Ayarlar mimarisi tek tek ayarlara uygulanırsa bu sağlayıcıyı yalnızca bu ayarlar için, geri kalanı için kullanırLocalFileSettingsProvider. Aşağıdaki kod örneği, ayarlar sınıfına özel sağlayıcınızı kullanma talimatının nasıl yapılacağını gösterir.

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

Bir sağlayıcı aynı anda birden çok iş parçacığından çağrılabilir, ancak her zaman aynı depolama konumuna yazar; Bu nedenle, Uygulama Ayarlar mimarisi sağlayıcı sınıfınızın yalnızca tek bir örneğini oluşturur.

Önemli

Sağlayıcınızın iş parçacığı açısından güvenli olduğundan ve aynı anda yalnızca bir iş parçacığının yapılandırma dosyalarına yazılmasına izin verdiğinden emin olmanız gerekir.

Sağlayıcınızın ad alanında System.Configuration tanımlanan tüm ayar özniteliklerini desteklemesi gerekmez, ancak en düşük düzeyde ve UserScopedSettingAttributeve ApplicationScopedSettingAttribute desteği olmalıdırDefaultSettingValueAttribute. Desteklemediği öznitelikler için sağlayıcınız bildirimde bulunmadan başarısız olmalıdır; özel durum oluşturmamalıdır. Ancak ayarlar sınıfı özniteliklerin geçersiz bir bileşimini kullanıyorsa (uygulama ve UserScopedSettingAttribute aynı ayara uygulama ApplicationScopedSettingAttribute gibi) sağlayıcınız bir özel durum oluşturup işlemi durdurmalıdır.

Ayrıca bkz.