Freigeben über


Erweitern des My Namespace in Visual Basic

Der My Namespace in Visual Basic macht Eigenschaften und Methoden verfügbar, mit denen Sie die Leistungsfähigkeit von .NET Framework problemlos nutzen können. Der My Namespace vereinfacht häufige Programmierprobleme und reduziert häufig eine schwierige Aufgabe auf eine einzelne Codezeile. Darüber hinaus ist der My-Namespace vollständig erweiterbar, sodass Sie das Verhalten von My anpassen und neue Dienste zu seiner Hierarchie hinzufügen können, um sich an bestimmte Anwendungsanforderungen anzupassen. In diesem Thema wird erläutert, wie vorhandene Mitglieder des My-Namespaces angepasst werden und wie Sie eigene benutzerdefinierte Klassen zum My-Namespace hinzufügen.

Anpassen vorhandener My-Namespacemember

Der My Namespace in Visual Basic macht häufig verwendete Informationen zu Ihrer Anwendung, Ihrem Computer und mehr verfügbar. Eine vollständige Liste der Objekte im My Namespace finden Sie unter "Meine Referenz". Möglicherweise müssen Sie vorhandene Member des My Namespace anpassen, damit sie den Anforderungen Ihrer Anwendung besser entsprechen. Jede Eigenschaft eines Objekts im My-Namespace, die nicht schreibgeschützt ist, kann auf einen benutzerdefinierten Wert festgelegt werden.

Angenommen, Sie verwenden das My.User Objekt häufig, um auf den aktuellen Sicherheitskontext für den Benutzer zuzugreifen, der Ihre Anwendung ausführt. Ihr Unternehmen verwendet jedoch ein benutzerdefiniertes Benutzerobjekt, um zusätzliche Informationen und Funktionen für Benutzer innerhalb des Unternehmens verfügbar zu machen. In diesem Szenario können Sie den Standardwert der My.User.CurrentPrincipal Eigenschaft durch eine Instanz Ihres eigenen benutzerdefinierten Prinzipalobjekts ersetzen, wie im folgenden Beispiel gezeigt:

My.User.CurrentPrincipal = CustomPrincipal

Durch Festlegen der CurrentPrincipal Eigenschaft für das My.User Objekt wird die Identität geändert, unter der die Anwendung ausgeführt wird. Das My.User Objekt gibt wiederum Informationen zum neu angegebenen Benutzer zurück.

Hinzufügen von Elementen zu My Objekten

Die zurückgegebenen My.Application Typen und My.Computer werden als Partial Klassen definiert. Daher können Sie die Objekte My.Application und My.Computer erweitern, indem Sie eine Partial-Klasse namens MyApplication oder MyComputer erstellen. Die Klasse kann keine Private-Klasse sein. Wenn Sie die Klasse als Teil des My-Namespaces angeben, können Sie Eigenschaften und Methoden hinzufügen, die zu den My.Application- oder My.Computer-Objekten hinzugefügt werden.

Im folgenden Beispiel wird eine Eigenschaft mit dem Namen DnsServerIPAddresses zu dem 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

Obwohl der My Namespace Lösungen für viele gängige Programmieraufgaben bereitstellt, treten möglicherweise Aufgaben auf, die der My Namespace nicht adresst. Ihre Anwendung kann beispielsweise auf benutzerdefinierte Verzeichnisdienste für Benutzerdaten zugreifen, oder Ihre Anwendung verwendet Assemblys, die nicht standardmäßig mit Visual Basic installiert sind. Sie können den My Namespace erweitern, um benutzerdefinierte Lösungen auf allgemeine Aufgaben einzuschließen, die für Ihre Umgebung spezifisch sind. Der My Namespace kann einfach erweitert werden, um neue Member hinzuzufügen, um wachsende Anwendungsanforderungen zu erfüllen. Darüber hinaus können Sie Ihre My Namespaceerweiterungen als Visual Basic-Vorlage für andere Entwickler bereitstellen.

Hinzufügen von Mitgliedern zum My Namespace

Da My ein Namespace wie jeder andere Namespace ist, können Sie ihm Eigenschaften auf oberster Ebene hinzufügen, indem Sie einfach 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 IntelliSense den Modulnamen nicht anzeigt, wenn die Member des My Namespaces angezeigt werden.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Um Mitglieder zum My-Namespace hinzuzufügen, fügen Sie dem Modul nach Bedarf Eigenschaften hinzu. Fügen Sie für jede Eigenschaft, die dem My Namespace hinzugefügt wird, ein privates Feld vom Typ ThreadSafeObjectProvider(Of T)hinzu, wobei der Typ der typ ist, der von Ihrer benutzerdefinierten Eigenschaft zurückgegeben wird. Dieses Feld wird verwendet, um threadsichere Objektinstanzen zu erstellen, die von der Eigenschaft durch Aufrufen der GetInstance Methode zurückgegeben werden. Daher erhält jeder Thread, der auf die erweiterte Eigenschaft zugreift, eine eigene Instanz des zurückgegebenen Typs. Im folgenden Beispiel wird eine Eigenschaft mit dem Namen SampleExtension vom Typ SampleExtension 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

Sie können das My.Application Objekt verwenden, um Ereignisse für Ihre benutzerdefinierten My Objekte verfügbar zu machen, indem Sie die MyApplication partielle Klasse im My Namespace erweitern. Bei Windows-basierten Projekten können Sie im Projektmappen-Explorer auf den Knoten Mein Projekt für Ihr Projekt doppelklicken. Klicken Sie im Visual Basic Project Designer auf die Registerkarte "Anwendung " und dann auf die Schaltfläche " Anwendungsereignisse anzeigen ". Es wird eine neue Datei mit dem Namen ApplicationEvents.vb 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 Objekte hinzufügen, indem Sie der My Klasse benutzerdefinierte MyApplication Ereignishandler hinzufügen. Mit benutzerdefinierten Ereignissen können Sie Code hinzufügen, der ausgeführt wird, wenn ein Ereignishandler hinzugefügt, entfernt oder das Ereignis ausgelöst wird. Beachten Sie, dass der AddHandler Code für ein benutzerdefiniertes Ereignis nur ausgeführt wird, wenn code von einem Benutzer zum Behandeln des Ereignisses hinzugefügt wird. Denken Sie beispielsweise daran, dass das SampleExtension Objekt aus dem vorherigen Abschnitt über ein Load Ereignis verfügt, für das Sie einen benutzerdefinierten Ereignishandler hinzufügen möchten. Das folgende Codebeispiel zeigt einen benutzerdefinierten Ereignishandler mit dem Namen SampleExtensionLoad , der beim Eintreten des My.SampleExtension.Load Ereignisses aufgerufen wird. Wenn Code zum Behandeln des neuen My.SampleExtensionLoad Ereignisses hinzugefügt wird, wird der AddHandler Teil dieses benutzerdefinierten Ereigniscodes ausgeführt. Die MyApplication_SampleExtensionLoad Methode ist im Codebeispiel enthalten, um ein Beispiel für einen Ereignishandler anzuzeigen, der das My.SampleExtensionLoad Ereignis behandelt. Beachten Sie, dass das SampleExtensionLoad Ereignis verfügbar ist, wenn Sie die Option "Meine Anwendungsereignisse " in der linken Dropdownliste oberhalb des Code-Editors auswählen, wenn Sie die ApplicationEvents.vb Datei bearbeiten.

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, verwenden Sie die folgenden Richtlinien, um die Wartungskosten Ihrer Erweiterungskomponenten zu minimieren:

  • Fügen Sie nur die Erweiterungslogik ein. Die in der My Namespaceerweiterung enthaltene Logik sollte nur den Code enthalten, der erforderlich ist, um die erforderliche Funktionalität im My Namespace verfügbar zu machen. Da sich Ihre Erweiterung in Benutzerprojekten als Quellcode befindet, führt die Aktualisierung der Erweiterungskomponente zu hohen Wartungskosten und sollte möglichst vermieden werden.
  • Minimieren Sie Projektannahmen. Wenn Sie die Erweiterungen des My-Namespace erstellen, setzen Sie nicht eine Gruppe von Verweisen, Importe auf Projektebene oder bestimmte Compilereinstellungen (z. B. Option Strict deaktiviert) als Annahme voraus. Minimieren Sie stattdessen Abhängigkeiten, und qualifizieren Sie alle Typverweise mithilfe des Global Schlüsselworts. Stellen Sie außerdem sicher, dass die Erweiterung mit aktivierter Option Strict-Einstellung kompiliert wird, um Fehler in der Erweiterung zu minimieren.
  • Isolieren Sie den Erweiterungscode. Wenn Sie den Code in einer einzelnen Datei platzieren, kann die Erweiterung ganz einfach als Visual Studio-Elementvorlage bereitgestellt werden. Weitere Informationen finden Sie weiter unten in diesem Thema unter "Packen und Bereitstellen von Erweiterungen". Das Platzieren des gesamten My-Namespaceerweiterungscodes in einer einzelnen Datei oder einem separaten Ordner in einem Projekt hilft den Benutzern auch, die My-Namespaceerweiterung zu finden.

Entwerfen von Klassenbibliotheken für My

Wie bei den meisten Objektmodellen funktionieren einige Entwurfsmuster im My Namespace und andere 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, alle Eingaben bereitstellen, die zum Ausführen der jeweiligen Aufgabe erforderlich sind. Vermeiden Sie das Erstellen von Methoden, die auf dem vorherigen Zustand basieren, z. B. offene Verbindungen mit Ressourcen.
  • Globale Instanzen. Der einzige Zustand, der im My-Namespace beibehalten wird, ist global für das Projekt. Zum Beispiel kapselt My.Application.Info den Zustand, der in der gesamten Anwendung gemeinsam genutzt wird.
  • Einfache Parametertypen. Halten Sie die Dinge einfach, indem Sie komplexe Parametertypen vermeiden. Erstellen Sie stattdessen Methoden, die keine Parametereingabe übernehmen oder einfache Eingabetypen wie Zeichenfolgen, Grundtypen usw. verwenden.
  • Fabrikmethoden Einige Typen sind notwendigerweise schwer zu instanziieren. Durch das Anbieten von Factory-Methoden als Erweiterungen für den My Namespace können Sie Typen einfacher entdecken und verwenden, die in diese Kategorie fallen. Ein Beispiel für eine Factory-Methode, die gut funktioniert, ist My.Computer.FileSystem.OpenTextFileReader. Es gibt mehrere Streamtypen, die in .NET Framework verfügbar sind. Durch die spezifische Angabe von Textdateien hilft OpenTextFileReader dem Benutzer zu verstehen, welcher Datenstrom verwendet werden soll.

Diese Richtlinien schließen keine allgemeinen Entwurfsprinzipien für Klassenbibliotheken aus. Stattdessen sind sie Empfehlungen, die für Entwickler optimiert sind, die Visual Basic und den My Namespace verwenden. Allgemeine Entwurfsprinzipien zum Erstellen von Klassenbibliotheken finden Sie unter Framework-Entwurfsrichtlinien.

Packen und Bereitstellen von Erweiterungen

Sie können Namespaceerweiterungen in eine Visual Studio-Projektvorlage einschließen My oder Ihre Erweiterungen verpacken und als Visual Studio-Elementvorlage bereitstellen. Wenn Sie Ihre My Namespaceerweiterungen als Visual Studio-Elementvorlage verpacken, können Sie zusätzliche Funktionen von Visual Basic nutzen. Mit diesen Funktionen können Sie eine Erweiterung einschließen, wenn ein Projekt auf eine bestimmte Assembly verweist, oder Benutzern das explizite Hinzufügen der My Namespaceerweiterung mithilfe der Seite "Meine Erweiterungen" des Visual Basic-Projekt-Designers ermöglichen.

Ausführliche Informationen zum Bereitstellen von My Namespaceerweiterungen finden Sie unter "Packen und Bereitstellen von benutzerdefinierten Meine Erweiterungen".

Siehe auch