Bagikan melalui


Arsitektur pengaturan aplikasi

Topik ini menjelaskan cara kerja arsitektur Application Pengaturan, dan menjelajahi fitur arsitektur tingkat lanjut, seperti pengaturan yang dikelompokkan dan kunci pengaturan.

Arsitektur pengaturan aplikasi mendukung penentuan pengaturan yang sangat diketik dengan lingkup aplikasi atau pengguna, dan mempertahankan pengaturan antar sesi aplikasi. Arsitektur ini menyediakan mesin persistensi default untuk menyimpan pengaturan ke dan memuatnya dari sistem file lokal. Arsitektur ini juga mendefinisikan antarmuka untuk menyediakan mesin persistensi kustom.

Antarmuka disediakan yang memungkinkan komponen kustom untuk mempertahankan pengaturan mereka sendiri ketika dihosting dalam aplikasi. Dengan menggunakan kunci pengaturan, komponen dapat menjaga pengaturan untuk beberapa instans komponen terpisah.

Menentukan Pengaturan

Arsitektur pengaturan aplikasi digunakan dalam ASP.NET dan Formulir Windows, dan berisi sejumlah kelas dasar yang dibagikan di kedua lingkungan. Yang paling penting adalah SettingsBase, yang menyediakan akses ke pengaturan melalui koleksi, dan menyediakan metode tingkat rendah untuk memuat dan menyimpan pengaturan. Setiap lingkungan menerapkan kelasnya sendiri yang berasal dari SettingsBase untuk menyediakan fungsionalitas pengaturan tambahan untuk lingkungan tersebut. Dalam aplikasi berbasis Formulir Windows, semua pengaturan aplikasi harus ditentukan pada kelas yang berasal dari ApplicationSettingsBase kelas , yang menambahkan fungsionalitas berikut ke kelas dasar:

  • Operasi pemuatan dan penghematan tingkat lebih tinggi

  • Dukungan untuk pengaturan cakupan pengguna

  • Mengembalikan pengaturan pengguna ke default yang telah ditentukan sebelumnya

  • Memutakhirkan pengaturan dari versi aplikasi sebelumnya

  • Memvalidasi pengaturan, baik sebelum diubah atau sebelum disimpan

Pengaturan dapat dijelaskan menggunakan sejumlah atribut yang ditentukan dalam System.Configuration namespace; ini dijelaskan dalam Atribut Pengaturan Aplikasi. Saat menentukan pengaturan, Anda harus menerapkannya dengan ApplicationScopedSettingAttribute atau UserScopedSettingAttribute, yang menjelaskan apakah pengaturan berlaku untuk seluruh aplikasi atau hanya untuk pengguna saat ini.

Contoh kode berikut mendefinisikan kelas pengaturan kustom dengan satu pengaturan, 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

Persistensi Pengaturan

Kelas ApplicationSettingsBase tidak sendiri bertahan atau memuat pengaturan; pekerjaan ini jatuh ke penyedia pengaturan, kelas yang berasal dari SettingsProvider. Jika kelas turunan ApplicationSettingsBase tidak menentukan penyedia pengaturan melalui SettingsProviderAttribute, maka penyedia default, LocalFileSettingsProvider, digunakan.

Sistem konfigurasi yang awalnya dirilis dengan .NET Framework mendukung penyediaan data konfigurasi aplikasi statis melalui file machine.config komputer lokal atau dalam app.file exe.config yang Anda sebarkan dengan aplikasi Anda. Kelas LocalFileSettingsProvider memperluas dukungan asli ini dengan cara berikut:

  • Pengaturan cakupan aplikasi dapat disimpan di file machine.config atau app.exe.config. Machine.config selalu baca-saja, sementara app.exe.config dibatasi oleh pertimbangan keamanan untuk baca-saja untuk sebagian besar aplikasi.

  • Pengaturan yang dicakup pengguna dapat disimpan dalam appfile .exe.config, dalam hal ini mereka diperlakukan sebagai default statis.

  • Pengaturan cakupan pengguna non-default disimpan dalam file baru, user.config. Anda dapat menentukan default untuk pengaturan cakupan pengguna dengan DefaultSettingValueAttribute. Karena pengaturan yang tercakup pengguna sering berubah selama eksekusi aplikasi, user.config selalu dibaca/ditulis. Untuk informasi selengkapnya, lihat Di mana pengaturan cakupan pengguna disimpan.

Ketiga pengaturan penyimpanan file konfigurasi dalam format XML. Elemen XML tingkat atas untuk pengaturan cakupan aplikasi adalah <appSettings>, sementara <userSettings> digunakan untuk pengaturan yang tercakup pengguna. File app.exe.config yang berisi pengaturan cakupan aplikasi dan default untuk pengaturan yang dilingkup pengguna akan terlihat seperti ini:

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

Untuk definisi elemen dalam bagian pengaturan aplikasi dari file konfigurasi, lihat Aplikasi Pengaturan Skema.

Pengikatan Pengaturan

Pengaturan aplikasi menggunakan arsitektur pengikatan data Formulir Windows untuk menyediakan komunikasi dua arah pembaruan pengaturan antara objek pengaturan dan komponen. Jika Anda menggunakan Visual Studio untuk membuat pengaturan aplikasi dan menetapkannya ke properti komponen, pengikatan ini dibuat secara otomatis.

Anda hanya dapat mengikat pengaturan aplikasi ke komponen yang mendukung IBindableComponent antarmuka. Selain itu, komponen harus menerapkan peristiwa perubahan untuk properti terikat tertentu, atau memberi tahu pengaturan aplikasi bahwa properti telah berubah melalui INotifyPropertyChanged antarmuka. Jika komponen tidak diterapkan IBindableComponent dan Anda mengikat melalui Visual Studio, properti terikat akan diatur untuk pertama kalinya, tetapi tidak akan diperbarui. Jika komponen menerapkan IBindableComponent tetapi tidak mendukung pemberitahuan perubahan properti, pengikatan tidak akan diperbarui dalam file pengaturan ketika properti diubah.

Beberapa komponen Formulir Windows, seperti ToolStripItem, tidak mendukung pengikatan pengaturan.

Serialisasi Pengaturan

Ketika LocalFileSettingsProvider harus menyimpan pengaturan ke disk, ia melakukan tindakan berikut:

  1. Menggunakan refleksi untuk memeriksa semua properti yang ditentukan pada kelas turunan Anda ApplicationSettingsBase , menemukan yang diterapkan dengan atau ApplicationScopedSettingAttributeUserScopedSettingAttribute.

  2. Menserialisasikan properti ke disk. Ini pertama-tama mencoba memanggil ConvertToString atau ConvertFromString pada jenis yang terkait TypeConverter. Jika ini tidak berhasil, ia menggunakan serialisasi XML sebagai gantinya.

  3. Menentukan pengaturan mana yang masuk ke file mana, berdasarkan atribut pengaturan.

Jika Anda menerapkan kelas pengaturan Anda sendiri, Anda dapat menggunakan SettingsSerializeAsAttribute untuk menandai pengaturan untuk serialisasi biner atau kustom menggunakan SettingsSerializeAs enumerasi. Untuk informasi selengkapnya tentang membuat kelas pengaturan Anda sendiri dalam kode, lihat Cara: Membuat aplikasi Pengaturan.

Lokasi File Pengaturan

Lokasi appfile .exe.config dan user.config akan berbeda berdasarkan cara aplikasi diinstal. Untuk aplikasi berbasis Formulir Windows yang disalin ke komputer lokal, app.exe.config akan berada di direktori yang sama dengan direktori dasar file utama aplikasi yang dapat dieksekusi, dan user.config akan berada di lokasi yang ditentukan oleh Application.LocalUserAppDataPath properti. Untuk aplikasi yang diinstal dengan ClickOnce, kedua file ini akan berada di Direktori Data ClickOnce di bawah %InstallRoot%\Documents dan Pengaturan\username\Local Pengaturan.

Lokasi penyimpanan file-file ini sedikit berbeda jika pengguna telah mengaktifkan profil roaming, yang memungkinkan pengguna untuk menentukan pengaturan Windows dan aplikasi yang berbeda ketika mereka menggunakan komputer lain dalam domain. Dalam hal ini, aplikasi ClickOnce dan aplikasi non-ClickOnce akan memiliki appfile .exe.config dan user.config yang disimpan di bawah %InstallRoot%\Documents dan Pengaturan\username\Application Data.

Untuk informasi selengkapnya tentang cara kerja fitur Pengaturan Aplikasi dengan teknologi penyebaran baru, lihat ClickOnce dan Pengaturan Aplikasi. Untuk informasi selengkapnya tentang Direktori Data ClickOnce, lihat Mengakses Data Lokal dan Jarak Jauh di Aplikasi ClickOnce.

Pengaturan dan Keamanan Aplikasi

Pengaturan aplikasi dirancang untuk bekerja dalam kepercayaan parsial, lingkungan terbatas yang merupakan default untuk aplikasi Formulir Windows yang dihosting melalui Internet atau intranet. Tidak ada izin khusus di luar kepercayaan parsial yang diperlukan untuk menggunakan pengaturan aplikasi dengan penyedia pengaturan default.

Saat pengaturan aplikasi digunakan dalam aplikasi ClickOnce, userfile .config disimpan di direktori data ClickOnce. Ukuran file .config aplikasi tidak userboleh melebihi kuota direktori data yang ditetapkan oleh ClickOnce. Untuk informasi selengkapnya, lihat ClickOnce dan Pengaturan Aplikasi.

Penyedia Pengaturan Kustom

Dalam arsitektur Application Pengaturan, ada konektor longgar antara kelas pembungkus pengaturan aplikasi, berasal dari ApplicationSettingsBase, dan penyedia atau penyedia pengaturan terkait, berasal dari SettingsProvider. Asosiasi ini hanya didefinisikan oleh SettingsProviderAttribute yang diterapkan ke kelas pembungkus atau properti individualnya. Jika penyedia pengaturan tidak ditentukan secara eksplisit, penyedia default, LocalFileSettingsProvider, akan digunakan. Akibatnya, arsitektur ini mendukung pembuatan dan penggunaan penyedia pengaturan kustom.

Misalnya, Anda ingin mengembangkan dan menggunakan SqlSettingsProvider, penyedia yang akan menyimpan semua data pengaturan dalam database Microsoft SQL Server. Kelas turunan Anda SettingsProviderakan menerima informasi ini dalam metodenya Initialize sebagai parameter jenis System.Collections.Specialized.NameValueCollection. Anda kemudian akan menerapkan GetPropertyValues metode untuk mengambil pengaturan Anda dari penyimpanan data, dan SetPropertyValues untuk menyimpannya. Penyedia Anda dapat menggunakan yang SettingsPropertyCollection disediakan untuk GetPropertyValues menentukan nama, jenis, dan cakupan properti, serta atribut pengaturan lain yang ditentukan untuk properti tersebut.

Penyedia Anda perlu menerapkan satu properti dan satu metode yang implementasinya mungkin tidak jelas. Properti ApplicationName adalah properti abstrak dari SettingsProvider; Anda harus memprogramnya untuk mengembalikan yang berikut:

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

Kelas turunan Anda juga harus menerapkan Initialize metode yang tidak mengambil argumen dan tidak mengembalikan nilai. Metode ini tidak didefinisikan oleh SettingsProvider.

Terakhir, Anda menerapkan IApplicationSettingsProvider pada penyedia Anda untuk memberikan dukungan untuk menyegarkan pengaturan, mengembalikan pengaturan ke defaultnya, dan meningkatkan pengaturan dari satu versi aplikasi ke versi aplikasi lainnya.

Setelah menerapkan dan mengkompilasi penyedia, Anda perlu menginstruksikan kelas pengaturan Anda untuk menggunakan penyedia ini alih-alih default. Anda mencapai ini melalui SettingsProviderAttribute. Jika diterapkan ke seluruh kelas pengaturan, penyedia digunakan untuk setiap pengaturan yang ditentukan kelas; jika diterapkan ke pengaturan individual, arsitektur Application Pengaturan menggunakan penyedia tersebut hanya untuk pengaturan tersebut, dan digunakan LocalFileSettingsProvider untuk sisanya. Contoh kode berikut menunjukkan cara menginstruksikan kelas pengaturan untuk menggunakan penyedia kustom Anda.

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

Penyedia dapat dipanggil dari beberapa utas secara bersamaan, tetapi akan selalu menulis ke lokasi penyimpanan yang sama; oleh karena itu, arsitektur Pengaturan Aplikasi hanya akan membuat instans tunggal kelas penyedia Anda.

Penting

Anda harus memastikan bahwa penyedia Anda aman utas, dan hanya mengizinkan satu utas pada satu waktu untuk menulis ke file konfigurasi.

Penyedia Anda tidak perlu mendukung semua atribut pengaturan yang ditentukan dalam System.Configuration namespace layanan, meskipun harus memiliki dukungan ApplicationScopedSettingAttribute minimum dan UserScopedSettingAttribute, dan juga harus mendukung DefaultSettingValueAttribute. Untuk atribut yang tidak didukungnya, penyedia Anda seharusnya hanya gagal tanpa pemberitahuan; seharusnya tidak melemparkan pengecualian. Namun, jika kelas pengaturan menggunakan kombinasi atribut yang tidak valid — seperti menerapkan ApplicationScopedSettingAttribute dan UserScopedSettingAttribute ke pengaturan yang sama — penyedia Anda harus memberikan pengecualian dan menghentikan operasi.

Baca juga