Memperluas Namespace Layanan My
My di Visual Basic
Namespace layanan My
di Visual Basic mengekspos properti dan metode yang membuat Anda dengan mudah memanfaatkan kekuatan .NET Framework. Namespace layanan My
menyederhanakan masalah pemrograman umum, sering mengurangi tugas yang sulit menjadi satu baris kode. Selain itu, namespace layanan My
sepenuhnya dapat diperluas sehingga Anda dapat menyesuaikan perilaku My
dan menambahkan layanan baru ke hierarkinya untuk beradaptasi dengan kebutuhan aplikasi tertentu. Topik ini membahas cara menyesuaikan anggota namespace layanan My
yang ada dan cara menambahkan kelas kustom Anda sendiri ke namespace layanan My
.
Melakukan kustomisasi anggota namespace My
yang sudah ada
Namespace layanan My
di Visual Basic memaparkan informasi yang sering digunakan tentang aplikasi, komputer, dan lainnya. Untuk daftar lengkap objek di namespace layanan My
, lihat Referensi Saya. Anda mungkin harus menyesuaikan anggota namespace layanan My
yang ada sehingga lebih cocok dengan kebutuhan aplikasi Anda. Properti objek apa pun di namespace layanan My
yang tidak baca-saja dapat diatur ke nilai kustom.
Misalnya, asumsikan bahwa Anda sering menggunakan objek My.User
untuk mengakses konteks keamanan saat ini bagi pengguna yang menjalankan aplikasi Anda. Namun, perusahaan Anda menggunakan objek pengguna kustom untuk mengekspos informasi dan kemampuan tambahan bagi pengguna dalam perusahaan. Dalam skenario ini, Anda dapat mengganti nilai default properti My.User.CurrentPrincipal
dengan instans objek utama kustom milik Anda, seperti yang ditunjukkan dalam contoh berikut:
My.User.CurrentPrincipal = CustomPrincipal
Pengaturan properti CurrentPrincipal
pada objek My.User
mengubah identitas tempat aplikasi berjalan. Objek My.User
, pada gilirannya, mengembalikan informasi tentang pengguna yang baru ditentukan.
Menambahkan anggota ke My
objek
Jenis yang dikembalikan dari My.Application
dan My.Computer
didefinisikan sebagai kelas Partial
. Oleh karena itu, Anda dapat memperluas objek My.Application
dan My.Computer
dengan membuat kelas Partial
bernama MyApplication
atau MyComputer
. Kelas tidak boleh kelas Private
. Jika Anda menentukan kelas sebagai bagian dari namespace layanan My
, Anda dapat menambahkan properti dan metode yang akan disertakan dengan objek My.Application
atau My.Computer
.
Contoh berikut menambahkan properti bernama DnsServerIPAddresses
ke objek My.Computer
:
Imports System.Net.NetworkInformation
Namespace My
Partial Class MyComputer
Friend ReadOnly Property DnsServerIPAddresses() As IPAddressCollection
Get
Dim dnsAddressList As IPAddressCollection = Nothing
For Each adapter In System.Net.NetworkInformation.
NetworkInterface.GetAllNetworkInterfaces()
Dim adapterProperties = adapter.GetIPProperties()
Dim dnsServers As IPAddressCollection = adapterProperties.DnsAddresses
If dnsAddressList Is Nothing Then
dnsAddressList = dnsServers
Else
dnsAddressList.Union(dnsServers)
End If
Next adapter
Return dnsAddressList
End Get
End Property
End Class
End Namespace
Menambahkan objek kustom ke namespace layanan My
Meskipun namespace layanan My
menyediakan solusi untuk banyak tugas pemrograman umum, Anda mungkin menemukan tugas yang tidak ditangani namespace layanan My
. Misalnya, aplikasi Anda mungkin mengakses layanan direktori kustom untuk data pengguna, atau aplikasi Anda mungkin menggunakan rakitan yang tidak diinstal secara default dengan Visual Basic. Anda dapat memperluas namespace layanan My
untuk menyertakan solusi kustom ke tugas umum yang spesifik untuk lingkungan Anda. Namespace layanan My
dapat dengan mudah diperluas untuk menambahkan anggota baru untuk memenuhi kebutuhan aplikasi yang berkembang. Selain itu, Anda dapat menyebarkan ekstensi namespace My
milik Anda ke pengembang lain sebagai templat Visual Basic.
Menambahkan anggota ke namespace layanan My
Karena My
adalah namespace seperti namespace lainnya, Anda dapat menambahkan properti tingkat atas ke dalamnya hanya dengan menambahkan modul dan menentukan Namespace
dari My
. Anotasi modul dengan atribut HideModuleName
seperti yang ditunjukkan dalam contoh berikut. Atribut HideModuleName
memastikan bahwa IntelliSense tidak akan menampilkan nama modul saat menampilkan anggota namespace layanan My
.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Untuk menambahkan anggota ke namespace layanan My
, tambahkan properti sesuai kebutuhan ke modul. Untuk setiap properti yang ditambahkan ke namespace layanan My
, tambahkan bidang privat jenis ThreadSafeObjectProvider(Of T)
, di mana jenisnya adalah jenis yang dikembalikan oleh properti kustom Anda. Bidang ini digunakan untuk membuat instans objek aman utas untuk dikembalikan oleh properti dengan memanggil metode GetInstance
. Akibatnya, setiap utas yang mengakses properti yang diperluas menerima instans sendiri dari jenis yang dikembalikan. Contoh berikut menambahkan properti bernama SampleExtension
yang berjenis SampleExtension
ke namespace layanan My
:
Namespace My
<HideModuleName()>
Module MyCustomExtensions
Private _extension As New ThreadSafeObjectProvider(Of SampleExtension)
Friend ReadOnly Property SampleExtension() As SampleExtension
Get
Return _extension.GetInstance()
End Get
End Property
End Module
End Namespace
Menambahkan peristiwa ke objek kustom My
Anda dapat menggunakan objek My.Application
untuk mengekspos peristiwa untuk objek kustom My
Anda dengan memperluas kelas parsial MyApplication
di namespace layanan My
. Untuk proyek berbasis Windows, Anda dapat mengklik dua kali simpul Project Saya untuk proyek Anda di Penjelajah Solusi. Di Visual Basic Perancang Proyek, klik tab Aplikasi lalu klik tombol Tampilkan Peristiwa Aplikasi. File baru yang bernama ApplicationEvents.vb akan dibuat. Ini berisi kode berikut untuk memperluas kelas MyApplication
:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Anda dapat menambahkan penanganan aktivitas untuk objek kustom My
Anda dengan menambahkan penanganan aktivitas kustom ke kelas MyApplication
. Peristiwa kustom memungkinkan Anda untuk menambahkan kode yang akan dijalankan saat penanganan aktivitas ditambahkan, dihapus, atau peristiwa dinaikkan. Perhatikan bahwa kode AddHandler
untuk peristiwa kustom hanya berjalan jika kode ditambahkan oleh pengguna untuk menangani peristiwa. Misalnya, pertimbangkan bahwa objek SampleExtension
dari bagian sebelumnya memiliki peristiwa Load
yang ingin Anda tambahkan penanganan aktivitas kustomnya. Contoh kode berikut menunjukkan penanganan aktivitas kustom bernama SampleExtensionLoad
yang akan dipanggil saat peristiwa My.SampleExtension.Load
terjadi. Ketika kode ditambahkan untuk menangani peristiwa baru My.SampleExtensionLoad
, bagian AddHandler
dari kode peristiwa kustom ini dijalankan. Metode MyApplication_SampleExtensionLoad
ini disertakan dalam contoh kode untuk menampilkan contoh penanganan aktivitas yang menangani peristiwa My.SampleExtensionLoad
. Perhatikan bahwa peristiwa SampleExtensionLoad
akan tersedia saat Anda memilih opsi Peristiwa Aplikasi Saya di daftar drop-down kiri di atas Editor Kode saat Anda mengedit file ApplicationEvents.vb.
Namespace My
Partial Friend Class MyApplication
' Custom event handler for Load event.
Private _sampleExtensionHandlers As EventHandler
Public Custom Event SampleExtensionLoad As EventHandler
AddHandler(ByVal value As EventHandler)
' Warning: This code is not thread-safe. Do not call
' this code from multiple concurrent threads.
If _sampleExtensionHandlers Is Nothing Then
AddHandler My.SampleExtension.Load, AddressOf OnSampleExtensionLoad
End If
_sampleExtensionHandlers =
System.Delegate.Combine(_sampleExtensionHandlers, value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
_sampleExtensionHandlers =
System.Delegate.Remove(_sampleExtensionHandlers, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
If _sampleExtensionHandlers IsNot Nothing Then
_sampleExtensionHandlers.Invoke(sender, e)
End If
End RaiseEvent
End Event
' Method called by custom event handler to raise user-defined
' event handlers.
<Global.System.ComponentModel.EditorBrowsable(
Global.System.ComponentModel.EditorBrowsableState.Advanced)>
Protected Overridable Sub OnSampleExtensionLoad(
ByVal sender As Object, ByVal e As EventArgs)
RaiseEvent SampleExtensionLoad(sender, e)
End Sub
' Event handler to call My.SampleExtensionLoad event.
Private Sub MyApplication_SampleExtensionLoad(
ByVal sender As Object, ByVal e As System.EventArgs
) Handles Me.SampleExtensionLoad
End Sub
End Class
End Namespace
Pedoman desain
Saat Anda mengembangkan ekstensi ke namespace layanan My
, gunakan panduan berikut untuk membantu meminimalkan biaya pemeliharaan komponen ekstensi Anda:
- Sertakan hanya logika ekstensi. Logika yang disertakan dalam ekstensi namespace layanan
My
hanya boleh menyertakan kode yang diperlukan untuk mengekspos fungsionalitas yang diperlukan di namespace layananMy
. Karena ekstensi Anda akan berada di proyek pengguna sebagai kode sumber, memperbarui komponen ekstensi menimbulkan biaya pemeliharaan yang tinggi dan harus dihindari jika memungkinkan. - Meminimalkan asumsi proyek. Saat Anda membuat ekstensi namespace layanan
My
, jangan asumsikan sekumpulan referensi, impor tingkat proyek, atau pengaturan pengkompilasi tertentu (misalnya,Option Strict
nonaktif). Sebagai gantinya, minimalkan dependensi dan sepenuhnya penuhi syarat semua referensi jenis dengan menggunakan kata kunciGlobal
. Selain itu, pastikan ekstensi dikompilasi denganOption Strict
aktif untuk meminimalkan kesalahan dalam ekstensi. - Mengisolasi kode ekstensi. Menempatkan kode dalam satu file membuat ekstensi Anda mudah disebarkan sebagai template item Visual Studio. Untuk informasi selengkapnya, lihat "Mengemas dan Menyebarkan Ekstensi" nanti dalam topik ini. Menempatkan semua kode ekstensi namespace
My
dalam satu file atau folder terpisah dalam proyek juga akan membantu pengguna menemukan ekstensi namespace layananMy
.
Merancang pustaka kelas untuk My
Seperti halnya dengan sebagian besar model objek, beberapa pola desain bekerja dengan baik di namespace layanan My
dan yang lain tidak. Saat merancang ekstensi ke namespace layanan My
, pertimbangkan prinsip-prinsip berikut:
- Metode stateless. Metode di namespace
My
harus memberikan solusi lengkap untuk tugas tertentu. Pastikan bahwa nilai parameter yang diteruskan ke metode menyediakan semua input yang diperlukan untuk menyelesaikan tugas tertentu. Hindari membuat metode yang bergantung pada status sebelumnya, seperti koneksi terbuka ke sumber daya. - Instans global. Satu-satunya status yang dipertahankan di namespace layanan
My
adalah global untuk proyek. Misalnya,My.Application.Info
merangkum status yang dibagikan di seluruh aplikasi. - Tipe parameter sederhana. Jaga agar hal-hal tetap sederhana dengan menghindari jenis parameter yang kompleks. Sebaliknya, buat metode yang tidak mengambil input parameter atau yang mengambil jenis input sederhana seperti string, jenis primitif, dan sebagainya.
- Metode pabrik. Beberapa jenis tentu sulit untuk diwakili oleh instans. Menyediakan metode pabrik sebagai ekstensi ke namespace layanan
My
memungkinkan Anda untuk lebih mudah menemukan dan mengonsumsi jenis yang termasuk dalam kategori ini. Contoh metode pabrik yang bekerja dengan baik adalahMy.Computer.FileSystem.OpenTextFileReader
. Ada beberapa jenis aliran yang tersedia di .NET Framework. Dengan menentukan file teks secara khusus,OpenTextFileReader
membantu pengguna memahami aliran mana yang akan digunakan.
Pedoman ini tidak menghalangi prinsip-prinsip desain umum untuk pustaka kelas. Sebaliknya, mereka adalah rekomendasi yang dioptimalkan untuk pengembang yang menggunakan Visual Basic dan namespace layanan My
. Untuk prinsip desain umum membuat pustaka kelas, lihat Panduan Desain Kerangka Kerja.
Mengemas dan menyebarkan ekstensi
Anda dapat menyertakan ekstensi namespace layanan My
dalam templat proyek Visual Studio, atau Anda dapat mengemas ekstensi dan menyebarkannya sebagai templat item Visual Studio. Saat Anda mengemas ekstensi namespace Anda My
sebagai templat item Visual Studio, Anda dapat memanfaatkan kemampuan tambahan yang disediakan oleh Visual Basic. Kemampuan ini memungkinkan Anda menyertakan ekstensi saat proyek mereferensikan perakitan tertentu, atau memungkinkan pengguna untuk secara eksplisit menambahkan ekstensi namespace Anda My
dengan menggunakan halaman Ekstensi Saya dari Visual Basic Project Designer.
Untuk detail tentang cara menyebarkan ekstensi namespace My
, lihat Mengemas dan Menyebarkan Ekstensi Kustom.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk