Aracılığıyla paylaş


Uygulama Ayarları Mimarisi

Bu konu başlığında Uygulama Ayarları mimarisinin nasıl çalıştığı açıklanır ve mimarinin gruplandırılmış ayarlar ve ayarlar anahtarları gibi gelişmiş özellikleri incelenmektedir.

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, özel bir kalıcılık motoru sağlamak üzere arabirimleri de tanımlar.

Uygulamada barındırıldıklarında, özel bileşenlerin kendi ayarlarını kalıcı kılmasına olanak tanıyan 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 önemli olan, bir koleksiyon aracılığıyla ayarlara erişim sağlayan ve ayarları yüklemek ve kaydetmek için alt düzey yöntemler sağlayan SettingsBase' dir. Her ortam, SettingsBase'den türetilen kendi sınıfını uygulayarak bu ortam için ek ayarlar işlevselliği sağlar. Windows Forms tabanlı bir uygulamada, tüm uygulama ayarları ApplicationSettingsBase sınıfından türetilen 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ıya yönelik 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, System.Configuration ad alanında tanımlanan bir dizi öznitelik kullanılarak açıklanabilir; bunlar Uygulama Ayarları Öznitelikleribölümü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 ApplicationScopedSettingAttribute veya UserScopedSettingAttributeile uygulamanız gerekir.

Aşağıdaki kod örneği, BackgroundColortek bir ayara sahip ö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

Ayarlar Kalıcılığı

ApplicationSettingsBase sınıfı kalıcı değildir veya ayarları yüklemez; bu iş, SettingsProvider'den türetilen bir sınıf olan ayarlar sağlayıcısına düşer. türetilmiş bir ApplicationSettingsBase sınıfı SettingsProviderAttributearacılığıyla bir 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. LocalFileSettingsProvider sınıfı bu 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 okunurdur, oysa güvenlik nedeniyle app.exe.config çoğu uygulama için salt okunur olarak kısıtlanmıştır.

  • Kullanıcı kapsamlı ayarlar app.exe.config dosyalarda depolanabilir ve bu durumda bunlar statik varsayılanlar olarak değerlendirilir.

  • Varsayılan olmayan kullanıcı kapsamlı ayarlar, user.configyeni bir dosyada depolanır. DefaultSettingValueAttributeile kullanıcı kapsamlı bir ayar için varsayılan değeri belirtebilirsiniz. Kullanıcı kapsamındaki ayarlar genellikle uygulama yürütülmesi sırasında değiştiğinden, user.config her zaman okuma/yazma durumundadır. Daha fazla bilgi için, kullanıcıya özel ayarların nerede depolandığını görmek üzere 'e bakın.

Üç yapılandırma dosyası da ayarları XML biçiminde depolar. Uygulama kapsamlı ayarlar için en üst düzey XML öğesi <appSettings>, <userSettings> ise kullanıcı kapsamlı ayarlar için kullanılır. Hem uygulama kapsamlı ayarları hem de kullanıcı kapsamlı ayarlar için varsayılanları içeren bir app.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ğlantıları

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 IBindableComponent arabirimini destekleyen bir bileşene bağlayabilirsiniz. Ayrıca, bileşenin belirli bir ilişkili özellik için bir değişiklik olayı uygulaması veya uygulamanın ayarlarına özelliğin INotifyPropertyChanged arabirimi aracılığıyla değiştiğini bildirmesi gerekir. Bileşen IBindableComponent uygulamazsa ve Visual Studio aracılığıyla bağlama yapıyorsanız, ilişkili özellikler ilk kez ayarlanır, ancak güncelleştirilmez. Bileşen IBindableComponent uygular ancak özellik değişikliği bildirimlerini desteklemiyorsa, özellik değiştirildiğinde bağlama ayarlar dosyasında güncelleştirilmez.

ToolStripItemgibi bazı 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. yansımasını kullanarak ApplicationSettingsBase türetilmiş sınıfınızda tanımlanan tüm özellikleri inceler ve ApplicationScopedSettingAttribute veya UserScopedSettingAttributeile uygulanan özellikleri bulur.

  2. Özelliği diske serileştirir. İlk olarak, türün ilişkili TypeConverterüzerindeki ConvertToString veya ConvertFromString'i çağırmaya ç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, SettingsSerializeAs numaralandırmasını kullanarak ikili veya özel serileştirme için bir ayarı işaretlemek için SettingsSerializeAsAttribute kullanabilirsiniz. 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.

Ayarlar Dosya Konumları

app.exe.config ve kullanıcı.config dosyalarının konumu, 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, app.exe.config uygulamanın ana yürütülebilir dosyasının temel diziniyle aynı dizinde ve kullanıcı.config Application.LocalUserAppDataPath özelliği tarafından belirtilen konumda bulunur. ClickOnce yoluyla yüklenen bir uygulama için, bu dosyaların her ikisi de \Documents and Settings\kullanıcı adı\Local Settings %InstallRoot%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 kullanıcı.config dosyaları \Documents and Settings\ %InstallRoot%kullanıcı adı\Application Data altında depolanır.

Uygulama Ayarları özelliğinin yeni dağıtım teknolojisiyle nasıl çalıştığı hakkında daha fazla bilgi için bkz. clickOnce ve Uygulama 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üvenliği

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, ApplicationSettingsBase'den türetilen uygulama ayarları sarmalayıcı sınıfı ile SettingsProvider'den türetilen ilişkili ayarlar sağlayıcısı veya sağlayıcıları arasında gevşek bir bağlantı vardır. Bu ilişkilendirme, yalnızca sarmalayıcı sınıfına veya bu sınıfın tek tek özelliklerine uygulanmış olan SettingsProviderAttribute ile tanımlanır. Bir ayar sağlayıcısı açıkça belirtilmezse, LocalFileSettingsProvidervarsayılan sağlayıcı kullanı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ı olan SqlSettingsProvidergeliştirmek ve kullanmak istediğinizi varsayalım. SettingsProvidertüretilmiş sınıfınız bu bilgileri Initialize yönteminde System.Collections.Specialized.NameValueCollectiontüründe bir parametre olarak alır. Ardından, ayarlarınızı veri deposundan almak için GetPropertyValues yöntemini uygular ve bunları kaydetmek için SetPropertyValues. Sağlayıcınız, GetPropertyValues için sağlanan SettingsPropertyCollection kullanarak özelliğin adını, türünü ve kapsamını ve bu özellik için tanımlanan diğer ayarlar özniteliklerini belirleyebilir.

Sağlayıcınız, uygulamaları belirgin olmayan bir özellik ve tek bir yöntem uygulamalı. ApplicationName özelliği, SettingsProvidersoyut bir özelliğidir; aşağıdakileri döndürecek şekilde programlamalısınız:

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öntemi uygulamalıdır. Bu yöntem SettingsProvidertarafından tanı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ızda IApplicationSettingsProvider uygularsınız.

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 SettingsProviderAttributearacılığıyla gerç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; tek tek ayarlara uygulanırsa, Uygulama Ayarları mimarisi bu sağlayıcıyı yalnızca bu ayarlar için ve geri kalanlar için LocalFileSettingsProvider kullanır. 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 System.Configuration ad alanında tanımlanan tüm ayar özniteliklerini desteklemesi gerekmez, ancak en azından ApplicationScopedSettingAttribute ve UserScopedSettingAttribute'yi desteklemeli ve ayrıca DefaultSettingValueAttribute'ü de desteklemelidir. 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ı aynı ayara ApplicationScopedSettingAttribute ve UserScopedSettingAttribute uygulama gibi geçersiz bir öznitelik bileşimi kullanıyorsa, sağlayıcınız bir özel durum oluşturup işlemi durdurmalıdır.

Ayrıca bkz.