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.Application
Partial
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 deMy
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 (bijvoorbeeldOption Strict
uit). Minimaliseer in plaats daarvan afhankelijkheden en kwalificeren alle typeverwijzingen volledig met behulp van hetGlobal
trefwoord. Zorg er ook voor dat de extensie wordt gecompileerd omOption 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 deMy
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, isMy.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.