Uygulama Ayarları Mimarisi
Bu konu başlığında Application Ayarlar mimarisinin nasıl çalıştığını açıklar ve mimarinin gruplanmıştır ayarlar ve ayarlar anahtarları gibi gelişmiş özelliklerini inceler.
Uygulama ayarları mimarisi, uygulama veya kullanıcı kapsamı ile kesin türe sahip ayarları tanımlamayı ve ayarları uygulama oturumları arasında kalıcı olarak kalıcı olarak belirlemeyi destekler. Mimari, ayarları yerel dosya sistemine kaydetmeye ve yerel dosya sisteminden yüklemeye 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ıklarında kendi ayarlarını kalıcı olarak barındırmalarına olanak sağlayan arabirimler sağlanır. Bileşenler, ayarlar anahtarlarını kullanarak bileşenin birden çok örneğinin ayarlarını ayrı tutabilirsiniz.
Kimlik Ayarlar
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, bir koleksiyon aracılığıyla ayarlara erişim sağlayan ve ayarları yükp kaydetmeye SettingsBase düşük düzeyli yöntemler sağlayan 'dır. Her ortam, bu ortam için ek ayarlar SettingsBase işlevselliği sağlamak için sınıfından türetilen kendi sınıfını kullanır. Form Windows bir uygulamada, tüm uygulama ayarlarının temel sınıfa aşağıdaki işlevselliği ekleyen sınıfından türetilen bir sınıfta ApplicationSettingsBase tanımlanmış olması gerekir:
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 geri döndürme
Önceki bir uygulama sürümünden ayarları yükseltme
Ayarları değiştirmeden önce veya kaydedmeden önce doğrulama
Ayarlar ad alanı içinde tanımlanan bir dizi öznitelik kullanılarak açıklanmalıdır; bunlar Uygulama Ve Öznitelikler System.ConfigurationSystem.Configuration Bir ayarı tanımlarken, ayarın uygulamanın tamamı için mi yoksa yalnızca geçerli kullanıcı için mi geçerli olduğunu açıklayan veya ApplicationScopedSettingAttributeUserScopedSettingAttribute ile uygulatabilirsiniz.
Aşağıdaki kod örneği, tek bir ayarı olan özel ayarlar sınıfını BackgroundColor 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ık
Sınıf, ApplicationSettingsBase ayarları kalıcı olarak veya yüklemez; bu iş, 'den türetilen bir sınıf olan ayarlar sağlayıcısına denk SettingsProvider gelir. türetilmiş bir sınıfı ApplicationSettingsBase aracılığıyla bir ayar sağlayıcısı belirtmezseniz, varsayılan sağlayıcı , SettingsProviderAttributeLocalFileSettingsProvider kullanılır.
başlangıçta .NET Framework ile yayımlanan yapılandırma sistemi, statik uygulama yapılandırma verilerini yerel bilgisayarın machine.config dosyası aracılığıyla veya uygulamanıza dağıtarak birexe.config dosyası app. içinde sağlamayı destekler. sınıfı LocalFileSettingsProvider bu yerel desteği aşağıdaki yollarla genişleter:
Uygulama kapsamlı ayarlar, machine.config veyaexe.config
app.depolanmış olabilir. Machine.config her zaman salt okunurdur, ancak .exe.config güvenlik konuları çoğu uygulama içinappsalt okunur olarak kısıtlanır.Kullanıcı kapsamlı ayarlar
app.exe.config dosyalarında depolandırılarak statik varsayılan olarak kabul edilir.Varsayılan olmayan kullanıcı kapsamlı ayarlar yeni bir dosyada depolanır, kullanıcı .config; burada kullanıcı, uygulamayı yürütmekte olan kişinin kullanıcı adıdır. ile kullanıcı kapsamlı bir ayar için varsayılan değer DefaultSettingValueAttribute belirtebilirsiniz. Kullanıcı kapsamlı ayarlar genellikle uygulama yürütme sırasında değişe.config
userher zaman okuma/yazma olur.
Üç yapılandırma dosyasının da ayarları XML biçiminde depolar. Uygulama kapsamlı ayarlar için en üst düzey XML öğesi, kullanıcı <appSettings><userSettings> kapsamlı ayarlar için kullanılırken öğesidir. Hem uygulama exe.config ayarları hem de kullanıcı kapsamlı ayarlar için varsayılanları içeren bir .exe.config dosyası app şöyle olabilir:
<?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. Application Ayarlar Schema.
Ayarlar Bağlamaları
Uygulama ayarları, Windows ve bileşenler arasında ayar güncelleştirmelerinin iki yol iletişimini sağlamak için Windows Forms veri bağlama mimarisini kullanır. Uygulama ayarlarını Visual Studio ve bileşen özelliklerine atamak için bu bağlamaları kullanırsanız, bu bağlamalar otomatik olarak oluşturulur.
Bir uygulama ayarını yalnızca arabirimini destekleyen bir bileşene IBindableComponent bebilirsiniz. Ayrıca bileşen, belirli bir bağlı özellik için bir değişiklik olayı uygulamalı veya uygulama ayarlarına özelliğin arabirim aracılığıyla değiştiğini INotifyPropertyChanged bildirebilir. Bileşen uygulanmazsa ve uygulama aracılığıyla Visual Studio, bağlı özellikler ilk kez IBindableComponent ayarlanır, ancak güncelleştirilz. Bileşen özellik değişikliği bildirimlerini uygulayıyor ancak desteklemezse, özellik değiştirilse bağlama IBindableComponent ayarlar dosyasında güncelleştirilmiyor.
gibi Windows Forms bileşenleri, ToolStripItem ayar bağlamalarını desteklemez.
Ayarlar Serileştirme
Ayarları LocalFileSettingsProvider diske kaydetmesi gereken zaman, aşağıdaki eylemleri gerçekleştirir:
Türetilmiş sınıfınız üzerinde tanımlanan tüm özellikleri incelemek ve veya ile uygulananları ApplicationSettingsBase bulmak için ApplicationScopedSettingAttribute yansımayı UserScopedSettingAttribute kullanır.
Özelliği diske seri hale getirme. İlk olarak türün ConvertToString ilişkili üzerinde veya ConvertFromString çağrısına TypeConverter çalışır. Bu başarısız olursa, bunun yerine XML serileştirme kullanır.
Ayarın özniteliğine bağlı olarak hangi ayarların hangi dosyalarda ilerler olduğunu belirler.
Kendi ayarlar sınıfınızı uygulayan, bir ayarı ikili veya özel serileştirme için bir numaralama kullanarak işaretlemek SettingsSerializeAsAttributeSettingsSerializeAs için kullanabilirsiniz. Kodda kendi ayarlar sınıfınızı oluşturma hakkında daha fazla bilgi için, bkz. How to: Create Application Ayarlar.
Ayarlar Konumlar
.exe.config ve kullanıcı app.config app dosyalarının konumu, uygulamanın nasıl yük sürümüne bağlı olarak farklılık gösterir. Yerel bilgisayara kopyalanan Windows Forms tabanlı bir uygulama için .exe.config, uygulamanın ana yürütülebilir dosyasının temel diziniyle aynı dizinde bulunur ve kullanıcı.config özelliği tarafından belirtilen konumda appappApplication.LocalUserAppDataPath bulunur. ClickOnce ile yüklenmiş bir uygulama için bu dosyaların her ikisi de %InstallRoot%\Documents ve Ayarlar\username\Local ClickOnce altındaki ClickOnce Data Directory'de Ayarlar.
Bir kullanıcı dolaşım profillerini etkinleştirdiyse, kullanıcının bir etki alanı içindeki diğer bilgisayarları kullanırken farklı Windows ve uygulama ayarlarını tanımlamalarına olanak sağlayan bu dosyaların depolama konumu biraz farklıdır. Bu durumda, hem ClickOnce uygulamaları hem de ClickOnce olmayan uygulamaların .exe.config ve kullanıcı.config dosyaları app %InstallRoot%\Documents ve Ayarlar\username\Application Data altında depolanır. app
Application Ayarlar özelliğinin yeni dağıtım teknolojisiyle nasıl çalıştığını görmek için bkz. ClickOnce ve Application Ayarlar. ClickOnce Data Directory 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 üzerinde barındırılan Windows Forms uygulamaları için varsayılan kısıtlı bir ortam olan kısmi güvende ç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 izinlere gerek yoktur.
Uygulama ayarları bir uygulama ClickOnce,.config user dosya ClickOnce dizininde depolanır. Uygulamanın dosya boyutu.config user tarafından ayarlanmış veri dizini kotasını ClickOnce. Daha fazla bilgi için bkz. ClickOnce ve Application Ayarlar.
Özel Ayarlar Sağlayıcıları
Application Ayarlar mimarisinde, 'den türetilen uygulama ayarları sarmalayıcı sınıfı ile ile ilişkili ayarlar sağlayıcısı veya sağlayıcılar arasında, 'den türetilen gevşek bir ApplicationSettingsBase bağlantı SettingsProvider vardır. Bu ilişkilendirme yalnızca sarmalayıcı SettingsProviderAttribute sınıfına veya tek tek özelliklerine uygulanan ile tanımlanır. Bir ayar sağlayıcısı açıkça belirtilmezse, varsayılan sağlayıcı LocalFileSettingsProvider kullanılır. Sonuç olarak, bu mimari özel ayar sağlayıcıları oluşturmayı ve kullanmayı destekler.
Örneğin, tüm ayar verilerini bir veritabanına depolar bir sağlayıcı geliştirmek ve kullanmak SqlSettingsProvider Microsoft SQL Server düşünün. Türetilmiş SettingsProvider sınıfınız bu bilgileri yönteminde Initialize türünde bir parametre olarak System.Collections.Specialized.NameValueCollection alır. Ardından, ayarlarınızı GetPropertyValues veri mağazasından almak ve kaydetmek için yöntemini SetPropertyValues uygulayabilirsiniz. Sağlayıcınız, özelliğin adını, türünü ve kapsamını ve bu özellik için tanımlanan diğer ayar özniteliklerini belirlemek için SettingsPropertyCollectionGetPropertyValues sağlanan 'i kullanabilir.
Sağlayıcınızın uygulamaları belirgin olmayan bir özellik ve bir yöntem uygulaması gerekir. özelliği ApplicationName soyut bir SettingsProvider özelliğidir; aşağıdakini dönecek şekilde programlamalıdır:
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, bağımsız değişken alan Initialize ve değer döndüren bir yöntem de uygulamalı. Bu yöntem tarafından SettingsProvider tanımlanmaz.
Son olarak, ayarları yenileme, ayarları varsayılan ayarlarına geri döndürme ve ayarları bir uygulama sürümünden diğerine yükseltme desteği sağlamak için IApplicationSettingsProvider sağlayıcınıza uygulayabilirsiniz.
Sağlayıcınızı uygulayan ve derleyenin ardından, ayarlar sınıfınıza varsayılan yerine bu sağlayıcıyı kullanma talimatını ve ardından. Bunu aracılığıyla SettingsProviderAttribute gerçekleştirin. 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 yalnızca bu ayarlar için bu sağlayıcıyı ve geri kalanı LocalFileSettingsProvider için kullanır. Aşağıdaki kod örneğinde, ayarlar sınıfına özel sağlayıcınızı kullanma talimatını nasıl ve hangileri olduğu 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 konuma yazar; Bu nedenle, Application Ayarlar mimarisi sağlayıcı sınıfınız için yalnızca tek bir örnek örneği hazırlar.
Önemli
Sağlayıcınızın iş parçacığı güvenli olduğundan ve yapılandırma dosyalarına aynı anda yalnızca bir iş parçacığının yazmanıza izin olduğundan emin olun.
Sağlayıcınızın ad alanı içinde tanımlanan tüm ayar özniteliklerini desteklemesi gerek değildir, ancak en azından ve desteği de System.ConfigurationApplicationScopedSettingAttributeUserScopedSettingAttribute desteklemesi DefaultSettingValueAttribute gerekir. Desteklemez bu öznitelikler için sağlayıcınız bildirim olmadan başarısız olacaktır; bir özel durum oluşturur. Ancak, ayarlar sınıfı aynı ayara ve uygulama gibi özniteliklerin geçersiz bir birleşimini kullanıyorsa, sağlayıcınız bir özel durum ve durdurma ApplicationScopedSettingAttributeUserScopedSettingAttribute işlemi oluşturur.