Sdílet prostřednictvím


Rozšíření My oboru názvů v jazyce Visual Basic

Obor My názvů v jazyce Visual Basic zveřejňuje vlastnosti a metody, které vám umožní snadno využít výhod rozhraní .NET Framework. Obor My názvů zjednodušuje běžné programovací problémy, často snižuje obtížné úlohy na jeden řádek kódu. Kromě toho je obor názvů plně rozšiřitelný, My takže můžete přizpůsobit chování My a přidat nové služby do své hierarchie tak, aby se přizpůsobily konkrétním potřebám aplikace. Toto téma popisuje, jak přizpůsobit existující členy My oboru názvů a jak přidat vlastní třídy do My oboru názvů.

Přizpůsobení existujících My členů oboru názvů

Obor My názvů v jazyce Visual Basic zveřejňuje často používané informace o vaší aplikaci, počítači a dalších. Úplný seznam objektů v oboru názvů najdete v My části Můj odkaz. Možná budete muset přizpůsobit existující členy My oboru názvů, aby lépe odpovídaly potřebám vaší aplikace. Libovolnou vlastnost objektu My v oboru názvů, který není jen pro čtení, lze nastavit na vlastní hodnotu.

Předpokládejme například, že objekt často používáte My.User pro přístup k aktuálnímu kontextu zabezpečení pro uživatele, který spouští vaši aplikaci. Vaše společnost ale používá vlastní objekt uživatele k zveřejnění dalších informací a možností pro uživatele v rámci společnosti. V tomto scénáři můžete nahradit výchozí hodnotu vlastnosti instancí vlastního My.User.CurrentPrincipal objektu objektu zabezpečení, jak je znázorněno v následujícím příkladu:

My.User.CurrentPrincipal = CustomPrincipal

CurrentPrincipal Nastavení vlastnosti objektu My.User změní identitu, pod kterou aplikace běží. Objekt My.User zase vrátí informace o nově zadaném uživateli.

Přidání členů do My objektů

Typy vrácené z My.Application a My.Computer jsou definovány jako Partial třídy. Proto můžete rozšířit My.Application a My.Computer objekty vytvořením třídy s Partial názvem MyApplication nebo MyComputer. Třída nemůže být Private třídou. Pokud zadáte třídu jako součást My oboru názvů, můžete přidat vlastnosti a metody, které budou zahrnuty do objektů My.Application nebo My.Computer objektů.

Následující příklad přidá vlastnost pojmenovanou DnsServerIPAddresses k objektu 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

Přidání vlastních objektů do My oboru názvů

My Přestože obor názvů poskytuje řešení pro mnoho běžných programovacích úloh, můžete narazit na úlohy, které My obor názvů neřeší. Vaše aplikace může například přistupovat k vlastním adresářovým službám pro uživatelská data nebo aplikace může používat sestavení, která nejsou ve výchozím nastavení nainstalována pomocí jazyka Visual Basic. Obor názvů můžete rozšířit My tak, aby zahrnoval vlastní řešení pro běžné úlohy specifické pro vaše prostředí. Obor My názvů lze snadno rozšířit a přidat nové členy tak, aby vyhovoval rostoucím potřebám aplikace. Rozšíření oboru názvů můžete navíc nasadit My ostatním vývojářům jako šablonu jazyka Visual Basic.

Přidání členů do My oboru názvů

Protože My je obor názvů jako jakýkoli jiný obor názvů, můžete do něj přidat vlastnosti nejvyšší úrovně tak, že přidáte modul a zadáte Namespace hodnotu My. Anotujte modul pomocí atributu HideModuleName , jak je znázorněno v následujícím příkladu. Atribut HideModuleName zajišťuje, že IntelliSense nezobrazí název modulu, když zobrazí členy My oboru názvů.

Namespace My
  <HideModuleName()> 
  Module MyCustomModule

  End Module
End Namespace

Pokud chcete přidat členy do My oboru názvů, přidejte do modulu vlastnosti podle potřeby. Pro každou vlastnost přidanou My do oboru názvů přidejte soukromé pole typu ThreadSafeObjectProvider(Of T), kde typ je typ vrácený vaší vlastní vlastností. Toto pole slouží k vytvoření instancí objektů bezpečných pro přístup z více vláken, které mají být vráceny vlastností voláním GetInstance metody. V důsledku toho každé vlákno, které přistupuje k rozšířené vlastnosti obdrží vlastní instanci vráceného typu. Následující příklad přidá vlastnost s názvem SampleExtension typu SampleExtension do My oboru názvů:

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

Přidání událostí do vlastních My objektů

Objekt můžete použít My.Application k zveřejnění událostí pro vlastní My objekty rozšířením MyApplication částečné třídy v My oboru názvů. U projektů založených na Windows můžete poklikáním na uzel Můj projekt v projektu v Průzkumník řešení. V návrháři projektu jazyka Visual Basic klepněte na kartu Aplikace a potom klepněte na tlačítko Zobrazit události aplikace. Vytvoří se nový soubor s názvem ApplicationEvents.vb . Obsahuje následující kód pro rozšíření MyApplication třídy:

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

Obslužné rutiny událostí pro vlastní My objekty můžete přidat přidáním vlastních obslužných rutin událostí do MyApplication třídy. Vlastní události umožňují přidat kód, který se spustí při přidání, odebrání obslužné rutiny události nebo vyvolání události. Všimněte si, že kód vlastní události se spustí pouze v případě, že AddHandler je kód přidaný uživatelem pro zpracování události. Představte si například, že SampleExtension objekt z předchozí části má událost, pro kterou chcete přidat vlastní obslužnou Load rutinu události. Následující příklad kódu ukazuje vlastní obslužnou rutinu události s názvem SampleExtensionLoad , která bude vyvolána při výskytu My.SampleExtension.Load události. Při přidání kódu pro zpracování nové My.SampleExtensionLoad události se AddHandler spustí část tohoto vlastního kódu události. Metoda MyApplication_SampleExtensionLoad je zahrnuta v příkladu kódu k zobrazení příkladu obslužné rutiny My.SampleExtensionLoad události, která zpracovává událost. Všimněte si, že SampleExtensionLoad událost bude dostupná, když vyberete možnost Moje události aplikace v levém rozevíracím seznamu nad Editorem kódu při úpravě souboru 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

Pokyny pro návrh

Při vývoji rozšíření oboru My názvů využijte následující pokyny, které vám pomůžou minimalizovat náklady na údržbu komponent rozšíření:

  • Zahrnout pouze logiku rozšíření. Logika zahrnutá v My rozšíření oboru názvů by měla obsahovat pouze kód, který je potřeba k zveřejnění požadovaných funkcí v My oboru názvů. Vzhledem k tomu, že se vaše rozšíření bude nacházet v uživatelských projektech jako zdrojový kód, aktualizace komponenty rozšíření má vysoké náklady na údržbu a pokud je to možné, měli byste se vyhnout.
  • Minimalizujte předpoklady projektu. Při vytváření rozšíření My oboru názvů nepředpokládáte sadu odkazů, importy na úrovni projektu ani konkrétní nastavení kompilátoru (například Option Strict vypnuto). Místo toho minimalizujte závislosti a plně kvalifikujte všechny odkazy na typy pomocí klíčového Global slova. Také se ujistěte, že se rozšíření zkompiluje, Option Strict aby se minimalizovaly chyby v rozšíření.
  • Izolujte kód rozšíření. Umístěním kódu do jednoho souboru můžete rozšíření snadno nasadit jako šablonu položky sady Visual Studio. Další informace najdete v části Balení a nasazení rozšíření dále v tomto tématu. Umístění veškerého My kódu rozšíření oboru názvů do jednoho souboru nebo samostatné složky v projektu pomůže také uživatelům najít příponu My oboru názvů.

Navrhování knihoven tříd pro My

Stejně jako u většiny objektových modelů fungují některé vzory návrhu My dobře v oboru názvů a jiné ne. Při navrhování rozšíření My oboru názvů zvažte následující principy:

  • Bezstavové metody. Metody v My oboru názvů by měly poskytovat kompletní řešení pro konkrétní úlohu. Ujistěte se, že hodnoty parametrů předané metodě poskytují všechny vstupy potřebné k dokončení konkrétní úlohy. Vyhněte se vytváření metod, které závisejí na předchozím stavu, jako jsou otevřená připojení k prostředkům.
  • Globální instance. Jediný stav, který je zachován v My oboru názvů, je globální pro projekt. Například My.Application.Info zapouzdřuje stav, který se sdílí v celé aplikaci.
  • Jednoduché typy parametrů. Udržujte věci jednoduché tím, že se vyhnete složitým typům parametrů. Místo toho vytvořte metody, které buď nepřebírají žádný vstup parametrů, nebo které berou jednoduché vstupní typy, jako jsou řetězce, primitivní typy atd.
  • Metody továrny. Některé typy jsou nutně obtížné vytvořit instanci. Poskytování metod továrny jako rozšíření My oboru názvů umožňuje snadněji zjišťovat a využívat typy, které spadají do této kategorie. Příkladem metody továrny, která dobře funguje, je My.Computer.FileSystem.OpenTextFileReader. V rozhraní .NET Framework je k dispozici několik typů datových proudů. Zadáním textových souborů pomáhá OpenTextFileReader uživateli pochopit, který datový proud se má použít.

Tyto pokyny nebrání obecným principům návrhu knihoven tříd. Jedná se spíše o doporučení optimalizovaná pro vývojáře, kteří používají Visual Basic a My obor názvů. Obecné principy návrhu pro vytváření knihoven tříd najdete v tématu Pokyny pro návrh architektury.

Balení a nasazování rozšíření

Rozšíření oboru názvů můžete zahrnout My do šablony projektu sady Visual Studio nebo je můžete zabalit a nasadit jako šablonu položky sady Visual Studio. Když zabalíte My rozšíření oboru názvů jako šablonu položky sady Visual Studio, můžete využít další funkce poskytované jazykem Visual Basic. Tyto funkce umožňují zahrnout rozšíření, když projekt odkazuje na konkrétní sestavení, nebo uživatelům umožnit explicitně přidat My rozšíření oboru názvů pomocí stránky Moje rozšíření návrháře projektu jazyka Visual Basic.

Podrobnosti o nasazení My rozšíření oboru názvů najdete v tématu Balení a nasazení vlastních rozšíření My Extensions.

Viz také