Delen via


De My naamruimte uitbreiden in Visual Basic

De My naamruimte in Visual Basic bevat eigenschappen en methoden waarmee u eenvoudig kunt profiteren van de kracht van .NET Framework. De My naamruimte vereenvoudigt veelvoorkomende programmeerproblemen, waardoor een moeilijke taak vaak wordt beperkt tot één regel code. Daarnaast is de My naamruimte volledig uitbreidbaar, zodat u het gedrag van My en nieuwe services aan de hiërarchie kunt aanpassen om aan te passen aan specifieke toepassingsbehoeften. In dit onderwerp wordt beschreven hoe u bestaande leden van de My naamruimte aanpast en hoe u uw eigen aangepaste klassen toevoegt aan de My naamruimte.

Bestaande My naamruimteleden aanpassen

De My naamruimte in Visual Basic bevat veelgebruikte informatie over uw toepassing, uw computer en meer. Zie Mijn verwijzing voor een volledige lijst met de objecten in de My naamruimte. Mogelijk moet u bestaande leden van de My naamruimte aanpassen, zodat deze beter aansluiten op de behoeften van uw toepassing. Elke eigenschap van een object in de My naamruimte die niet alleen-lezen is, kan worden ingesteld op een aangepaste waarde.

Stel dat u het My.User object vaak gebruikt om toegang te krijgen tot de huidige beveiligingscontext voor de gebruiker die uw toepassing uitvoert. Uw bedrijf gebruikt echter een aangepast gebruikersobject om aanvullende informatie en mogelijkheden beschikbaar te maken voor gebruikers binnen het bedrijf. In dit scenario kunt u de standaardwaarde van de My.User.CurrentPrincipal eigenschap vervangen door een exemplaar van uw eigen aangepaste principal-object, zoals wordt weergegeven in het volgende voorbeeld:

My.User.CurrentPrincipal = CustomPrincipal

Als u de CurrentPrincipal eigenschap voor het My.User object instelt, wordt de identiteit gewijzigd waaronder de toepassing wordt uitgevoerd. Het My.User object retourneert op zijn beurt informatie over de zojuist opgegeven gebruiker.

Leden toevoegen aan My objecten

De typen die worden geretourneerd van My.Application en My.Computer worden gedefinieerd als Partial klassen. Daarom kunt u de en objecten uitbreiden door een klasse met de My.ApplicationPartial naam MyApplication of MyComputer.My.Computer De klasse kan geen klasse zijn Private . Als u de klasse opgeeft als onderdeel van de My naamruimte, kunt u eigenschappen en methoden toevoegen die worden opgenomen in de My.Application of My.Computer objecten.

In het volgende voorbeeld wordt een eigenschap met de naam DnsServerIPAddresses aan het My.Computer object toegevoegd:

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

Aangepaste objecten toevoegen aan de My naamruimte

Hoewel de My naamruimte oplossingen biedt voor veel algemene programmeertaken, kunt u taken tegenkomen die niet door de My naamruimte worden aangepakt. Uw toepassing heeft bijvoorbeeld toegang tot aangepaste adreslijstservices voor gebruikersgegevens of uw toepassing gebruikt assembly's die niet standaard zijn geïnstalleerd met Visual Basic. U kunt de My naamruimte uitbreiden met aangepaste oplossingen voor algemene taken die specifiek zijn voor uw omgeving. De My naamruimte kan eenvoudig worden uitgebreid om nieuwe leden toe te voegen om te voldoen aan groeiende toepassingsbehoeften. Daarnaast kunt u uw My naamruimteextensies implementeren voor andere ontwikkelaars als een Visual Basic-sjabloon.

Leden toevoegen aan de My naamruimte

Omdat My dit een naamruimte is zoals elke andere naamruimte, kunt u er eigenschappen op het hoogste niveau aan toevoegen door alleen een module toe te voegen en een Namespace van My. Aantekeningen toevoegen aan de module met het HideModuleName kenmerk, zoals wordt weergegeven in het volgende voorbeeld. Het HideModuleName kenmerk zorgt ervoor dat intelliSense de modulenaam niet weergeeft wanneer de leden van de My naamruimte worden weergegeven.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Als u leden wilt toevoegen aan de My naamruimte, voegt u indien nodig eigenschappen toe aan de module. Voeg voor elke eigenschap die is toegevoegd aan de My naamruimte een privéveld van het type ThreadSafeObjectProvider(Of T)toe, waarbij het type het type is dat wordt geretourneerd door uw aangepaste eigenschap. Dit veld wordt gebruikt om threadveilige objectexemplaren te maken die door de eigenschap moeten worden geretourneerd door de GetInstance methode aan te roepen. Als gevolg hiervan ontvangt elke thread die toegang heeft tot de uitgebreide eigenschap een eigen exemplaar van het geretourneerde type. In het volgende voorbeeld wordt een eigenschap met de naam SampleExtension toegevoegd die van het type SampleExtension is voor de My naamruimte:

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

Gebeurtenissen toevoegen aan aangepaste My objecten

U kunt het My.Application object gebruiken om gebeurtenissen voor uw aangepaste My objecten beschikbaar te maken door de MyApplication gedeeltelijke klasse uit te breiden in de My naamruimte. Voor Op Windows gebaseerde projecten kunt u dubbelklikken op het knooppunt Mijn project in Solution Explorer voor uw project. Klik in Visual Basic Project Designer op het tabblad Toepassing en klik vervolgens op de knop Toepassingsevenementen weergeven. Er wordt een nieuw bestand met de naam ApplicationEvents.vb gemaakt. Deze bevat de volgende code voor het uitbreiden van de MyApplication klasse:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

U kunt gebeurtenis-handlers voor uw aangepaste My objecten toevoegen door aangepaste gebeurtenis-handlers toe te voegen aan de MyApplication klasse. Met aangepaste gebeurtenissen kunt u code toevoegen die wordt uitgevoerd wanneer een gebeurtenis-handler wordt toegevoegd, verwijderd of de gebeurtenis wordt gegenereerd. Houd er rekening mee dat de AddHandler code voor een aangepaste gebeurtenis alleen wordt uitgevoerd als code wordt toegevoegd door een gebruiker om de gebeurtenis af te handelen. Stel dat het SampleExtension object uit de vorige sectie een Load gebeurtenis bevat waarvoor u een aangepaste gebeurtenis-handler wilt toevoegen. In het volgende codevoorbeeld ziet u een aangepaste gebeurtenis-handler met de naam SampleExtensionLoad die wordt aangeroepen wanneer de My.SampleExtension.Load gebeurtenis plaatsvindt. Wanneer er code wordt toegevoegd om de nieuwe My.SampleExtensionLoad gebeurtenis af te handelen, wordt het AddHandler deel van deze aangepaste gebeurteniscode uitgevoerd. De MyApplication_SampleExtensionLoad methode is opgenomen in het codevoorbeeld om een voorbeeld weer te geven van een gebeurtenis-handler die de My.SampleExtensionLoad gebeurtenis verwerkt. Houd er rekening mee dat de SampleExtensionLoad gebeurtenis beschikbaar is wanneer u de optie Mijn toepassingsgebeurtenissen selecteert in de vervolgkeuzelijst links boven de Code-editor wanneer u het ApplicationEvents.vb bestand bewerkt.

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

Ontwerprichtlijnen

Wanneer u extensies voor de My naamruimte ontwikkelt, gebruikt u de volgende richtlijnen om de onderhoudskosten van uw extensieonderdelen te minimaliseren:

  • Neem alleen de extensielogica op. De logica die is opgenomen in de My naamruimteextensie, moet alleen de code bevatten die nodig is om de vereiste functionaliteit beschikbaar te maken in de My naamruimte. Omdat uw extensie zich in gebruikersprojecten bevindt als broncode, leidt het bijwerken van het extensieonderdeel tot hoge onderhoudskosten en moet u indien mogelijk worden vermeden.
  • Minimaliseer projectveronderstellingen. Wanneer u uw extensies van de My naamruimte maakt, wordt niet uitgegaan van een set verwijzingen, import op projectniveau of specifieke compilerinstellingen (bijvoorbeeld Option Strict uit). Minimaliseer in plaats daarvan afhankelijkheden en kwalificeren alle typeverwijzingen volledig met behulp van het Global trefwoord. Zorg er ook voor dat de extensie wordt gecompileerd om Option Strict fouten in de extensie te minimaliseren.
  • De extensiecode isoleren. Als u de code in één bestand plaatst, kunt u de extensie eenvoudig implementeren als een Visual Studio-itemsjabloon. Zie 'Extensies verpakken en implementeren' verderop in dit onderwerp voor meer informatie. Als u alle code voor de My naamruimteextensie in één bestand of een afzonderlijke map in een project plaatst, kunnen gebruikers ook de extensie voor de My naamruimte vinden.

Klassenbibliotheken ontwerpen voor My

Net als bij de meeste objectmodellen werken sommige ontwerppatronen goed in de My naamruimte en andere niet. Houd bij het ontwerpen van een extensie voor de My naamruimte rekening met de volgende principes:

  • Staatloze methoden. Methoden in de My naamruimte moeten een volledige oplossing bieden voor een specifieke taak. Zorg ervoor dat de parameterwaarden die aan de methode worden doorgegeven, alle invoer opgeven die nodig is om de specifieke taak te voltooien. Vermijd het maken van methoden die afhankelijk zijn van een eerdere status, zoals open verbindingen met resources.
  • Globale exemplaren. De enige status die in de My naamruimte wordt onderhouden, is globaal voor het project. My.Application.Info Zo wordt de status ingekapseld die in de hele toepassing wordt gedeeld.
  • Eenvoudige parametertypen. Houd dingen eenvoudig door complexe parametertypen te vermijden. Maak in plaats daarvan methoden die geen parameterinvoer gebruiken of die eenvoudige invoertypen gebruiken, zoals tekenreeksen, primitieve typen, enzovoort.
  • Fabrieksmethoden. Sommige typen zijn noodzakelijkerwijs moeilijk te instantiëren. Door fabrieksmethoden als uitbreidingen voor de My naamruimte te bieden, kunt u gemakkelijker typen detecteren en gebruiken die in deze categorie vallen. Een voorbeeld van een fabrieksmethode die goed werkt, is My.Computer.FileSystem.OpenTextFileReader. Er zijn verschillende stroomtypen beschikbaar in .NET Framework. Door tekstbestanden specifiek op te geven, OpenTextFileReader helpt de gebruiker te begrijpen welke stream moet worden gebruikt.

Deze richtlijnen sluiten algemene ontwerpprincipes voor klassebibliotheken niet uit. In plaats daarvan zijn dit aanbevelingen die zijn geoptimaliseerd voor ontwikkelaars die Visual Basic en de My naamruimte gebruiken. Zie Ontwerprichtlijnen voor frameworks voor algemene ontwerpprincipes voor het maken van klassebibliotheken.

Extensies verpakken en implementeren

U kunt naamruimteextensies opnemen My in een Visual Studio-projectsjabloon of u kunt uw extensies inpakken en implementeren als een Visual Studio-itemsjabloon. Wanneer u uw My naamruimteextensies inpakt als een Visual Studio-itemsjabloon, kunt u profiteren van extra mogelijkheden van Visual Basic. Met deze mogelijkheden kunt u een extensie opnemen wanneer een project verwijst naar een bepaalde assembly of gebruikers in staat stellen uw naamruimteextensie expliciet toe te voegen My met behulp van de pagina Mijn extensies van visual Basic Project Designer.

Zie Packaging and Deploying Custom My Extensions (Aangepaste mijn extensies verpakken en implementeren) voor meer informatie over het implementeren My van naamruimteextensies.

Zie ook