Bagikan melalui


Arsitektur Pengaturan Aplikasi

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

Arsitektur pengaturan aplikasi mendukung penentuan pengaturan bertiper kuat dengan lingkup aplikasi atau pengguna, dan mempertahankan pengaturan di antara sesi-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 Windows Forms, 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 Windows Forms, semua pengaturan aplikasi harus ditentukan pada kelas yang berasal dari kelas ApplicationSettingsBase, yang menambahkan fungsionalitas berikut ke kelas dasar:

  • Operasi pemuatan dan penyimpanan tingkat lanjut

  • 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 namespace System.Configuration; 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 menentukan 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 menyimpan atau memuat pengaturan; pekerjaan ini jatuh ke penyedia pengaturan, kelas yang diturunkan 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 file app.exe.config yang Anda sebarkan dengan aplikasi Anda. Kelas LocalFileSettingsProvider memperluas dukungan asli ini dengan cara berikut:

  • Pengaturan cakupan aplikasi dapat disimpan dalam file machine.config atau app.exe.config. Machine.config selalu hanya-baca, sementara app.exe.config dibatasi menjadi hanya-baca karena pertimbangan keamanan untuk sebagian besar aplikasi.

  • Pengaturan cakupan pengguna dapat disimpan dalam file app.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 berlaku untuk pengguna sering berubah selama eksekusi aplikasi, user.config selalu dapat dibaca dan ditulis. Untuk informasi selengkapnya, lihat Di mana pengaturan cakupan pengguna disimpan.

Ketiga file konfigurasi menyimpan pengaturan dalam format XML. Elemen XML tingkat atas untuk pengaturan yang berlaku pada aplikasi adalah <appSettings>, sedangkan <userSettings> digunakan untuk pengaturan yang berlaku pada pengguna. File app.exe.config yang berisi pengaturan cakupan aplikasi dan default untuk pengaturan cakupan 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 Skema Pengaturan Aplikasi.

Pengaturan Binding

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 antarmuka IBindableComponent. Selain itu, komponen harus menerapkan peristiwa perubahan untuk properti terikat tertentu, atau memberi tahu pengaturan aplikasi bahwa properti telah berubah melalui antarmuka INotifyPropertyChanged. Jika komponen tidak menerapkan 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 saat properti diubah.

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

Serialisasi Pengaturan

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

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

  2. Menserialisasikan properti ke disk. Ini pertama-tama mencoba memanggil ConvertToString atau ConvertFromString pada TypeConverteryang terkait dengan jenis tersebut. 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 enumerasi SettingsSerializeAs. Untuk informasi selengkapnya tentang membuat kelas pengaturan Anda sendiri dalam kode, lihat Cara: Membuat Pengaturan Aplikasi.

Pengaturan Lokasi File

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

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, baik aplikasi ClickOnce maupun aplikasi non-ClickOnce akan memiliki file pengguna app.exe.config dan .config yang disimpan di bawah %InstallRoot%\Documents and Settings\nama pengguna\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 Windows Forms 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, file user.config disimpan di direktori data ClickOnce. Ukuran file user.config aplikasi tidak boleh melebihi kuota direktori data yang ditetapkan oleh ClickOnce. Untuk informasi selengkapnya, lihat ClickOnce dan Pengaturan Aplikasi.

Penyedia Pengaturan Kustom

Dalam arsitektur Pengaturan Aplikasi, ada keterhubungan longgar antara kelas pembungkus pengaturan aplikasi, diperoleh dari ApplicationSettingsBase, dan penyedia pengaturan atau penyedia terkait, diperoleh dari SettingsProvider. Asosiasi ini hanya didefinisikan oleh SettingsProviderAttribute yang diterapkan pada kelas pembungkus atau properti individual. Jika penyedia pengaturan tidak ditentukan secara eksplisit, penyedia default, LocalFileSettingsProvider, 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 SettingsProviderAnda akan menerima informasi ini dalam metode Initialize sebagai sebuah parameter dengan tipe System.Collections.Specialized.NameValueCollection. Anda kemudian akan menerapkan metode GetPropertyValues untuk mengambil pengaturan Anda dari penyimpanan data, dan SetPropertyValues untuk menyimpannya. Penyedia Anda dapat menggunakan SettingsPropertyCollection yang disediakan untuk GetPropertyValues untuk 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 SettingsProvider; Anda harus memprogramnya untuk mengembalikan hal 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 metode Initialize yang tidak mengambil argumen dan tidak mengembalikan nilai. Metode ini tidak didefinisikan oleh SettingsProvider.

Terakhir, Anda menerapkan IApplicationSettingsProvider pada penyedia Anda untuk memberikan dukungan dalam menyegarkan pengaturan, mengembalikan pengaturan ke pengaturan awalnya, dan meningkatkan pengaturan antar versi aplikasi.

Setelah Anda menerapkan dan mengkompilasi penyedia Anda, Anda perlu menginstruksikan kelas pengaturan Anda untuk menggunakan penyedia ini daripada yang 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 Pengaturan Aplikasi menggunakan penyedia tersebut hanya untuk pengaturan tersebut, dan menggunakan 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 menyimpan ke lokasi penyimpanan yang sama; oleh karena itu, arsitektur Pengaturan Aplikasi hanya akan membuat satu instance dari kelas penyedia Anda.

Penting

Anda harus memastikan bahwa penyedia Anda memiliki keamanan utas, dan hanya mengizinkan satu utas dalam satu waktu untuk menulis dalam file konfigurasi.

Penyedia Anda tidak perlu mendukung semua atribut pengaturan yang ditentukan dalam namespace System.Configuration, meskipun harus memiliki dukungan minimum ApplicationScopedSettingAttribute dan UserScopedSettingAttribute, dan juga harus mendukung DefaultSettingValueAttribute. Untuk atribut yang tidak didukungnya, penyedia Anda seharusnya hanya gagal tanpa memberikan pemberitahuan; seharusnya tidak mengeluarkan 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.

Lihat juga