Erweitern des My-Namespaces in Visual Basic
Aktualisiert: November 2007
Der My-Namespace in Visual Basic macht Eigenschaften und Methoden verfügbar, mit denen Sie alle Vorteile von .NET Framework problemlos nutzen können. Der My-Namespace vereinfacht häufig auftretende Programmierprobleme und löst schwierige Aufgaben oftmals mit nur einer Codezeile. Darüber hinaus ist der My-Namespace vollständig erweiterbar. So können Sie das Verhalten von My anpassen und seiner Hierarchie neue Dienste hinzufügen, um den Namespace auf spezielle Anwendungsanforderungen abzustimmen. In diesem Thema wird erläutert, wie vorhandene Member des My-Namespaces angepasst werden und wie Sie dem My-Namespace eigene benutzerdefinierte Klassen hinzufügen.
Themeninhalt
Anpassen von vorhandenen Membern des My-Namespaces
Hinzufügen von Membern zu My-Objekten
Hinzufügen von benutzerdefinierten Objekten zum My-Namespace
Hinzufügen von Membern zum My-Namespace
Hinzufügen von Ereignissen zu benutzerdefinierten My-Objekten
Entwurfsrichtlinien
Entwerfen von Klassenbibliotheken für My
Verpacken und Bereitstellen von Erweiterungen
Anpassen von vorhandenen Membern des My-Namespaces
Der My-Namespace in Visual Basic macht häufig verwendete Informationen über die Anwendung, den Computer usw. verfügbar. Eine vollständige Liste der Objekte im My-Namespace finden Sie unter My-Referenz. Vorhandene Member des My-Namespaces müssen eventuell angepasst werden, damit sie besser den Anforderungen der Anwendung entsprechen. Alle nicht schreibgeschützten Eigenschaften von Objekten im My-Namespace können auf einen benutzerdefinierten Wert festgelegt werden.
Angenommen, Sie verwenden häufig das My.User-Objekt, um auf den aktuellen Sicherheitskontext für den Benutzer zuzugreifen, der Ihre Anwendung ausführt. Ihr Unternehmen verwendet jedoch ein benutzerdefiniertes Objekt, um Benutzern innerhalb des Unternehmens zusätzliche Informationen und Funktionen zur Verfügung zu stellen. In diesem Szenario können Sie den Standardwert der My.User.CurrentPrincipal-Eigenschaft durch eine Instanz Ihres eigenen benutzerdefinierten Prinzipalobjekts ersetzen, wie das folgende Beispiel zeigt.
My.User.CurrentPrincipal = CustomPrincipal
Wenn die CurrentPrincipal-Eigenschaft des My.User-Objekts festgelegt wird, ändert sich die Identität, unter der die Anwendung ausgeführt wird. Das My.User-Objekt wiederum gibt Informationen über den neu angegebenen Benutzer zurück.
Hinzufügen von Membern zu My-Objekten
Die von My.Application und My.Computer zurückgegebenen Typen sind als Partial-Klassen definiert. Daher können Sie das My.Application-Objekt und das My.Computer-Objekt erweitern, indem Sie eine Partial-Klasse mit dem Namen MyApplication oder MyComputer erstellen. Bei der Klasse kann es sich nicht um eine Private-Klasse handeln. Wenn Sie die Klasse als Teil des My-Namespaces angeben, können Sie Eigenschaften und Methoden hinzufügen, die im My.Application-Objekt oder My.Computer-Objekt enthalten sind.
Im folgenden Beispiel wird z. B. eine Eigenschaft mit dem Namen DnsServerIPAddresses zum My.Computer-Objekt hinzugefügt.
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
Hinzufügen von benutzerdefinierten Objekten zum My-Namespace
Zwar stellt der My-Namespace Lösungen für häufig auftretende Programmieraufgaben bereit, doch gibt es möglicherweise auch Aufgaben, für die der My-Namespace keine Lösung bietet. Ihre Anwendung greift z. B. auf benutzerdefinierte Verzeichnisdienste für Benutzerdaten zu, oder die Anwendung verwendet unter Umständen Assemblys, die nicht standardmäßig mit Visual Basis installiert werden. Sie können den My-Namespace um benutzerdefinierte Lösungen für häufige, speziell in Ihrer Umgebung auszuführende Aufgaben erweitern. Der My-Namespace kann problemlos um neue Member erweitert werden, um wachsenden Anwendungsanforderungen zu erfüllen. Darüber hinaus können Sie Ihre My-Namespaceerweiterungen anderen Entwicklern als Visual Basic-Vorlage bereitstellen.
Hinzufügen von Membern zum My-Namespace
Da es sich beim My-Namespace um einen gewöhnlichen Namespace handelt, können Sie ihm Eigenschaften der obersten Ebene hinzufügen. Dazu müssen Sie lediglich ein Modul hinzufügen und einen Namespace von My angeben. Kommentieren Sie das Modul mit dem HideModuleName-Attribut, wie im folgenden Beispiel gezeigt. Das HideModuleName-Attribut stellt sicher, dass der Modulname von IntelliSense nicht angezeigt wird, wenn die Member des My-Namespaces angezeigt werden.
Namespace My
<HideModuleName()> _
Module MyCustomModule
End Module
End Namespace
Um dem My-Namespace Member hinzuzufügen, fügen Sie dem Modul Eigenschaften je nach Bedarf hinzu. Fügen Sie für jede dem My-Namespace hinzugefügte Eigenschaft ein privates Feld vom Typ ThreadSafeObjectProvider(Of T) hinzu. Bei dem Typ handelt es sich dabei um den von der benutzerdefinierten Eigenschaft zurückgegebenen Typ. Dieses Feld dient zum Erstellen threadsicherer Objektinstanzen, die von der Eigenschaft zurückgegeben werden sollen, indem die GetInstance-Methode aufgerufen wird. Daher empfängt jeder Thread, der auf die erweiterte Eigenschaft zugreift, seine eigene Instanz des zurückgegebenen Typs. Im folgenden Beispiel wird eine Eigenschaft mit dem Namen SampleExtension, die dem Typ SampleExtension angehört, zum My-Namespace hinzugefügt:
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
Hinzufügen von Ereignissen zu benutzerdefinierten My-Objekten
Mit dem My.Application-Objekt können Sie Ereignisse für Ihre benutzerdefinierten My-Objekte verfügbar machen, indem Sie die partielle MyApplication-Klasse im My-Namespace erweitern. Bei Windows-basierten Projekten können Sie auf den Knoten Eigenes Projekt für das Projekt im Projektmappen-Explorer doppelklicken. Im Visual Basic-Projekt-Designer klicken Sie auf die Registerkarte Application und dann auf die Schaltfläche View Application Events. Eine neue Datei mit dem Namen ApplicationEvents.vb wird erstellt. Sie enthält den folgenden Code zum Erweitern der MyApplication-Klasse.
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Sie können Ereignishandler für Ihre benutzerdefinierten My-Objekte hinzufügen, indem Sie der MyApplication-Klasse benutzerdefinierte Ereignishandler hinzufügen. Mithilfe benutzerdefinierter Ereignisse können Sie Code hinzufügen, der ausgeführt wird, wenn ein Ereignishandler hinzugefügt oder entfernt wird bzw. wenn das Ereignis ausgelöst wird. Der AddHandler-Code für ein benutzerdefiniertes Ereignis wird allerdings nur ausgeführt, wenn Code zum Behandeln des Ereignisses von einem Benutzer hinzugefügt wird. Berücksichtigen Sie beispielsweise, dass das SampleExtension-Objekt im vorherigen Abschnitt ein Load-Ereignis enthält, für das Sie einen benutzerdefinierten Ereignishandler hinzufügen sollten. Das folgende Codebeispiel zeigt einen benutzerdefinierten Ereignishandler mit dem Namen SampleExtensionLoad, der beim Auftreten des My.SampleExtension.Load-Ereignisses aufgerufen wird. Wird Code zum Behandeln des neuen My.SampleExtensionLoad-Ereignisses hinzugefügt, wird der AddHandler-Teil dieses benutzerdefinierten Ereigniscodes ausgeführt. Das Codebeispiel enthält die MyApplication_SampleExtensionLoad-Methode, um ein Beispiel für einen Ereignishandler zu zeigen, der das My.SampleExtensionLoad-Ereignis behandelt. Beachten Sie, dass das SampleExtensionLoad-Ereignis verfügbar ist, wenn Sie beim Bearbeiten der Datei ApplicationEvents.vb in der linken Dropdownliste oberhalb des Code-Editors die Option My Application Events auswählen.
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
Entwurfsrichtlinien
Wenn Sie Erweiterungen für den My-Namespace entwickeln, können Sie die Kosten für die Wartung der Erweiterungskomponenten mithilfe der folgenden Richtlinien minimieren.
Beziehen Sie nur die Erweiterungslogik ein. Die in der Erweiterung des My-Namespaces enthaltene Logik sollte nur den Code umfassen, der benötigt wird, um die erforderlichen Funktionen im My-Namespace verfügbar zu machen. Da Ihre Erweiterung in Benutzerprojekten als Quellcode enthalten ist, verursacht die Aktualisierung der Erweiterungskomponente hohe Pflegekosten und sollte nach Möglichkeit vermieden werden.
Minimieren Sie die Projektvoraussetzungen. Wenn Sie Ihre Erweiterungen des My-Namespaces erstellen, setzen Sie keine Verweise, Importe auf Projektebene oder spezielle Compilereinstellungen (z. B. Option Strict deaktiviert) voraus. Minimieren Sie stattdessen Abhängigkeiten, und qualifizieren Sie durch das Global-Schlüsselwort alle Typverweise vollständig. Stellen Sie außerdem sicher, dass die Erweiterung mit aktivierter Option Strict kompiliert wird, um Fehler in der Erweiterung zu minimieren.
Isolieren Sie den Erweiterungscode. Wenn Sie den Code in eine Datei einfügen, kann Ihre Erweiterung problemlos als Visual Studio-Elementvorlage bereitgestellt werden. Weitere Informationen finden Sie unter "Verpacken und Bereitstellen von Erweiterungen" weiter unten in diesem Thema. Wenn Sie den gesamten Code der Erweiterung des My-Namespaces in nur eine Datei oder in einen separaten Ordner in einem Projekt einfügen, fällt es den Benutzern zudem leichter, die Erweiterung des My-Namespaces zu finden.
Entwerfen von Klassenbibliotheken für My
Wie bei den meisten Objektmodellen funktionieren einige Entwurfsmuster gut im My-Namespace, andere dagegen nicht. Berücksichtigen Sie beim Entwerfen einer Erweiterung für den My-Namespace die folgenden Prinzipien:
Zustandslose Methoden. Methoden im My-Namespace sollten eine vollständige Lösung für eine bestimmte Aufgabe bereitstellen. Stellen Sie sicher, dass die Parameterwerte, die an die Methode übergeben werden, sämtliche Eingabewerte bereitstellen, die für die jeweilige Aufgabe benötigt werden. Erstellen Sie keine Methoden, die auf einem vorherigen Zustand beruhen, z. B. auf geöffneten Verbindungen zu Ressourcen.
Globale Instanzen. Der einzige Zustand, der im My-Namespace beibehalten wird, gilt global für das Projekt. Zum Beispiel kapselt My.Application.Info einen Zustand, der in der gesamten Anwendung verwendet wird.
Einfache Parametertypen. Verwenden Sie keine komplexen Parametertypen. Erstellen Sie stattdessen Methoden, die keine Parametereingaben erfordern oder die einfache Eingabetypen wie Zeichenfolgen, primitive Typen usw. verlangen.
Factorymethoden. Bei einigen Typen ist die Erstellung von Instanzen notwendigerweise schwierig. Wenn Sie Factorymethoden als Erweiterungen für den My-Namespace bereitstellen, können Sie Typen, die unter diese Kategorie fallen, einfacher ermitteln und nutzen. Ein Beispiel für eine gut funktionierende Factorymethode ist My.Computer.FileSystem.OpenTextFileReader. In .NET Framework stehen mehrere Streamtypen zur Verfügung. Wenn Sie Textdateien speziell angeben, hilft OpenTextFileReader dem Benutzer zu verstehen, welcher Stream verwendet werden soll.
Diese Richtlinien schließen allgemeine Entwurfsprinzipien für Klassenbibliotheken nicht aus. Es handelt sich vielmehr um Empfehlungen, die für Entwickler optimiert sind, die Visual Basic und den My-Namespace verwenden. Allgemeine Entwurfsprinzipien zum Erstellen von Klassenbibliotheken finden Sie unter Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken.
Verpacken und Bereitstellen von Erweiterungen
Sie können Erweiterungen des My-Namespaces in eine Visual Studio-Projektvorlage aufnehmen oder die Erweiterungen verpacken und als Visual Studio-Elementvorlage bereitstellen. Wenn Sie Ihre Erweiterungen des My-Namespaces als Visual Studio-Elementvorlage verpacken, können Sie die von Visual Basic bereitgestellten Fähigkeiten nutzen. Aufgrund dieser Fähigkeiten können Sie eine Erweiterung einfügen, wenn ein Projekt auf eine bestimmte Assembly verweist. Außerdem können Benutzer Ihre Erweiterung des My-Namespaces explizit mithilfe der Seite My-Erweiterungen des Visual Basic-Projekt-Designers hinzufügen.
Ausführliche Informationen zum Bereitstellen von Erweiterungen des My-Namespaces finden Sie unter Verpacken und Bereitstellen von benutzerdefinierten My-Erweiterungen.
Siehe auch
Konzepte
Verpacken und Bereitstellen von benutzerdefinierten My-Erweiterungen
Erweitern des Visual Basic-Anwendungsmodells
Anpassen der verfügbaren Objekte in "My"
Referenz
Seite "My-Erweiterungen", Projekt-Designer (Visual Basic)