Dela via


My Utöka namnområdet i Visual Basic

Namnområdet My i Visual Basic visar egenskaper och metoder som gör att du enkelt kan dra nytta av kraften i .NET Framework. Namnområdet My förenklar vanliga programmeringsproblem, vilket ofta minskar en svår uppgift till en enda kodrad. Dessutom My är namnområdet helt utökningsbart så att du kan anpassa beteendet My för och lägga till nya tjänster i hierarkin för att anpassa till specifika programbehov. I det här avsnittet beskrivs både hur du anpassar befintliga medlemmar i My namnområdet och hur du lägger till egna anpassade klasser i My namnområdet.

Anpassa befintliga My namnområdesmedlemmar

Namnområdet My i Visual Basic visar information som används ofta om ditt program, din dator med mera. En fullständig lista över objekten My i namnområdet finns i Min referens. Du kan behöva anpassa befintliga medlemmar i My namnområdet så att de bättre matchar programmets behov. Alla egenskaper för ett objekt i My namnområdet som inte är skrivskyddade kan anges till ett anpassat värde.

Anta till exempel att du ofta använder My.User objektet för att komma åt den aktuella säkerhetskontexten för den användare som kör ditt program. Företaget använder dock ett anpassat användarobjekt för att exponera ytterligare information och funktioner för användare i företaget. I det här scenariot kan du ersätta standardvärdet för My.User.CurrentPrincipal egenskapen med en instans av ditt eget objekt för anpassat huvudnamn, som du ser i följande exempel:

My.User.CurrentPrincipal = CustomPrincipal

Om du CurrentPrincipal anger egenskapen för My.User objektet ändras identiteten som programmet körs under. Objektet My.User returnerar i sin tur information om den nyligen angivna användaren.

Lägga till medlemmar i My objekt

De typer som returneras från My.Application och My.Computer definieras som Partial klasser. Därför kan du utöka objekten My.Application och My.Computer genom att skapa en Partial klass med namnet MyApplication eller MyComputer. Klassen kan inte vara en Private klass. Om du anger klassen som en del av My namnområdet kan du lägga till egenskaper och metoder som ska ingå i objekten My.Application eller My.Computer .

I följande exempel läggs en egenskap med namnet DnsServerIPAddresses till objektet 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

Lägga till anpassade objekt i My namnområdet

My Även om namnområdet innehåller lösningar för många vanliga programmeringsuppgifter kan du stöta på uppgifter som My namnområdet inte adresserar. Ditt program kan till exempel komma åt anpassade katalogtjänster för användardata, eller så kan programmet använda sammansättningar som inte är installerade som standard med Visual Basic. Du kan utöka My namnområdet till att omfatta anpassade lösningar för vanliga uppgifter som är specifika för din miljö. Namnområdet My kan enkelt utökas för att lägga till nya medlemmar för att uppfylla växande programbehov. Dessutom kan du distribuera namnområdestillägg My till andra utvecklare som en Visual Basic-mall.

Lägga till medlemmar i My namnområdet

Eftersom My är ett namnområde som alla andra namnområden kan du lägga till egenskaper på den översta nivån genom att bara lägga till en modul och ange en Namespace av My. Kommentera modulen med HideModuleName attributet enligt följande exempel. Attributet HideModuleName ser till att IntelliSense inte visar modulnamnet när det visar medlemmarna i My namnområdet.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Om du vill lägga till medlemmar i My namnområdet lägger du till egenskaper efter behov i modulen. För varje egenskap som läggs till i My namnområdet lägger du till ett privat fält av typen ThreadSafeObjectProvider(Of T), där typen är den typ som returneras av din anpassade egenskap. Det här fältet används för att skapa trådsäkra objektinstanser som ska returneras av egenskapen genom att anropa GetInstance metoden. Därför får varje tråd som kommer åt den utökade egenskapen sin egen instans av den returnerade typen. I följande exempel läggs en egenskap med namnet SampleExtension som är av typen SampleExtension till My namnområdet:

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

Lägga till händelser i anpassade My objekt

Du kan använda My.Application objektet för att exponera händelser för dina anpassade My objekt genom att utöka den MyApplication partiella klassen i My namnområdet. För Windows-baserade projekt kan du dubbelklicka på noden Mitt projekt i för projektet i Solution Explorer. I Visual Basic Project Designer klickar du på fliken Program och klickar sedan på knappen Visa programhändelser. En ny fil med namnet ApplicationEvents.vb skapas. Den innehåller följande kod för att MyApplication utöka klassen:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

Du kan lägga till händelsehanterare för dina anpassade My objekt genom att lägga till anpassade händelsehanterare i MyApplication klassen. Med anpassade händelser kan du lägga till kod som körs när en händelsehanterare läggs till, tas bort eller händelsen aktiveras. Observera att AddHandler koden för en anpassad händelse endast körs om kod läggs till av en användare för att hantera händelsen. Anta till exempel att SampleExtension objektet från föregående avsnitt har en Load händelse som du vill lägga till en anpassad händelsehanterare för. I följande kodexempel visas en anpassad händelsehanterare med namnet SampleExtensionLoad som anropas när händelsen My.SampleExtension.Load inträffar. När kod läggs till för att hantera den nya My.SampleExtensionLoad händelsen körs delen av den AddHandler här anpassade händelsekoden. Metoden MyApplication_SampleExtensionLoad ingår i kodexemplet för att visa ett exempel på en händelsehanterare som hanterar My.SampleExtensionLoad händelsen. Observera att händelsen SampleExtensionLoad blir tillgänglig när du väljer alternativet Mina programhändelser i den vänstra listrutan ovanför kodredigeraren när du redigerar filen 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

Designriktlinjer

När du utvecklar tillägg till My namnområdet använder du följande riktlinjer för att minimera underhållskostnaderna för tilläggskomponenterna:

  • Inkludera endast tilläggslogik. Logiken som ingår i My namnområdestillägget bör endast innehålla den kod som behövs för att exponera de nödvändiga funktionerna i My namnområdet. Eftersom tillägget kommer att finnas i användarprojekt som källkod medför uppdatering av tilläggskomponenten en hög underhållskostnad och bör undvikas om möjligt.
  • Minimera projektantaganden. När du skapar dina tillägg för My namnområdet ska du inte anta en uppsättning referenser, importer på projektnivå eller specifika kompilatorinställningar (till exempel Option Strict av). Minimera i stället beroenden och fullständigt kvalificera alla typreferenser med hjälp av nyckelordet Global . Se också till att tillägget kompileras med Option Strict på för att minimera fel i tillägget.
  • Isolera tilläggskoden. Om du placerar koden i en enda fil kan du enkelt distribuera tillägget som en Visual Studio-objektmall. Mer information finns i "Paketera och distribuera tillägg" senare i det här avsnittet. Genom att placera all namnområdestilläggskod My i en enda fil eller en separat mapp i ett projekt kan användarna också hitta namnområdestillägget My .

Utforma klassbibliotek för My

Som med de flesta objektmodeller fungerar vissa designmönster bra i My namnområdet och andra inte. När du utformar ett tillägg till My namnområdet bör du tänka på följande principer:

  • Tillståndslösa metoder. Metoder i My namnområdet bör ge en fullständig lösning på en specifik uppgift. Se till att parametervärdena som skickas till metoden innehåller alla indata som krävs för att slutföra den specifika aktiviteten. Undvik att skapa metoder som förlitar sig på tidigare tillstånd, till exempel öppna anslutningar till resurser.
  • Globala instanser. Det enda tillstånd som underhålls i My namnområdet är globalt för projektet. Kapslar till exempel My.Application.Info in tillstånd som delas i hela programmet.
  • Enkla parametertyper. Håll det enkelt genom att undvika komplexa parametertyper. Skapa i stället metoder som antingen inte tar några parameterindata eller som använder enkla indatatyper som strängar, primitiva typer och så vidare.
  • Fabriksmetoder. Vissa typer är nödvändigtvis svåra att instansiera. Genom att tillhandahålla fabriksmetoder som tillägg till My namnområdet kan du enklare identifiera och använda typer som tillhör den här kategorin. Ett exempel på en fabriksmetod som fungerar bra är My.Computer.FileSystem.OpenTextFileReader. Det finns flera tillgängliga strömtyper i .NET Framework. Genom att ange textfiler specifikt hjälper OpenTextFileReader det användaren att förstå vilken ström som ska användas.

Dessa riktlinjer utesluter inte allmänna designprinciper för klassbibliotek. I stället är de rekommendationer som är optimerade för utvecklare som använder Visual Basic och My namnområdet. Allmänna designprinciper för att skapa klassbibliotek finns i Riktlinjer för ramverksdesign.

Paketera och distribuera tillägg

Du kan inkludera My namnområdestillägg i en Visual Studio-projektmall, eller så kan du paketera dina tillägg och distribuera dem som en Visual Studio-objektmall. När du paketerar namnområdestilläggen My som en Visual Studio-objektmall kan du dra nytta av ytterligare funktioner som tillhandahålls av Visual Basic. Med de här funktionerna kan du inkludera ett tillägg när ett projekt refererar till en viss sammansättning eller göra det möjligt för användare att uttryckligen lägga till ditt My namnområdestillägg med hjälp av sidan Mina tillägg i Visual Basic Project Designer.

Mer information om hur du distribuerar My namnområdestillägg finns i Paketera och distribuera anpassade mina tillägg.

Se även