Bagikan melalui


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 layanan My. 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 kunci Global. Selain itu, pastikan ekstensi dikompilasi dengan Option 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 layanan My.

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 adalah My.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