Rozszerzanie My
przestrzeni nazw w Visual Basic
My
Przestrzeń nazw w Visual Basic uwidacznia właściwości i metody, które umożliwiają łatwe korzystanie z możliwości programu .NET Framework. My
Przestrzeń nazw upraszcza typowe problemy programistyczne, często zmniejszając trudne zadanie do pojedynczego wiersza kodu. Ponadto przestrzeń nazw jest w pełni rozszerzalna, My
dzięki czemu można dostosować zachowanie My
i dodać nowe usługi do hierarchii, aby dostosować się do określonych potrzeb aplikacji. W tym temacie omówiono zarówno sposób dostosowywania istniejących elementów My
członkowskich przestrzeni nazw, jak i sposobu dodawania własnych klas niestandardowych do My
przestrzeni nazw.
Dostosowywanie istniejących My
elementów członkowskich przestrzeni nazw
My
Przestrzeń nazw w języku Visual Basic udostępnia często używane informacje o aplikacji, komputerze i nie tylko. Aby uzyskać pełną listę obiektów w My
przestrzeni nazw, zobacz Moje odwołanie. Może być konieczne dostosowanie istniejących elementów członkowskich My
przestrzeni nazw, aby lepiej odpowiadały potrzebom aplikacji. Dowolna właściwość obiektu w My
przestrzeni nazw, która nie jest tylko do odczytu, może być ustawiona na wartość niestandardową.
Załóżmy na przykład, że często używasz My.User
obiektu w celu uzyskania dostępu do bieżącego kontekstu zabezpieczeń dla użytkownika uruchamiającego aplikację. Jednak firma używa niestandardowego obiektu użytkownika, aby uwidocznić dodatkowe informacje i możliwości dla użytkowników w firmie. W tym scenariuszu można zastąpić wartość My.User.CurrentPrincipal
domyślną właściwości wystąpieniem własnego niestandardowego obiektu podmiotu zabezpieczeń, jak pokazano w poniższym przykładzie:
My.User.CurrentPrincipal = CustomPrincipal
CurrentPrincipal
Ustawienie właściwości obiektu My.User
zmienia tożsamość, w której działa aplikacja. Z My.User
kolei obiekt zwraca informacje o nowo określonym użytkowniku.
Dodawanie elementów członkowskich do My
obiektów
Typy zwracane z My.Application
i My.Computer
są definiowane jako Partial
klasy. W związku z tym można rozszerzyć My.Application
obiekty i My.Computer
, tworząc klasę Partial
o nazwie MyApplication
lub MyComputer
. Klasa nie może być klasą Private
. Jeśli określisz klasę w ramach My
przestrzeni nazw, możesz dodać właściwości i metody, które zostaną dołączone do My.Application
obiektów lub My.Computer
.
Poniższy przykład dodaje właściwość o nazwie DnsServerIPAddresses
do My.Computer
obiektu:
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
Dodawanie obiektów niestandardowych do My
przestrzeni nazw
My
Mimo że przestrzeń nazw udostępnia rozwiązania dla wielu typowych zadań programistycznych, mogą wystąpić zadania, których My
przestrzeń nazw nie rozwiązuje. Na przykład aplikacja może uzyskiwać dostęp do niestandardowych usług katalogowych dla danych użytkownika lub aplikacja może używać zestawów, które nie są instalowane domyślnie w języku Visual Basic. Możesz rozszerzyć przestrzeń nazw, My
aby uwzględnić niestandardowe rozwiązania do typowych zadań specyficznych dla danego środowiska. My
Przestrzeń nazw można łatwo rozszerzyć, aby dodać nowych członków w celu zaspokojenia rosnących potrzeb aplikacji. Ponadto możesz wdrożyć My
rozszerzenia przestrzeni nazw dla innych deweloperów jako szablon języka Visual Basic.
Dodawanie elementów członkowskich do My
przestrzeni nazw
Ponieważ My
jest to przestrzeń nazw podobna do dowolnej innej przestrzeni nazw, możesz do niej dodać właściwości najwyższego poziomu, dodając moduł i określając element Namespace
My
. Dodaj adnotację do modułu za pomocą atrybutu HideModuleName
, jak pokazano w poniższym przykładzie. Atrybut HideModuleName
zapewnia, że funkcja IntelliSense nie będzie wyświetlać nazwy modułu podczas wyświetlania My
elementów członkowskich przestrzeni nazw.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Aby dodać członków do My
przestrzeni nazw, dodaj właściwości zgodnie z potrzebami do modułu. Dla każdej właściwości dodanej My
do przestrzeni nazw dodaj prywatne pole typu ThreadSafeObjectProvider(Of T)
, gdzie typ jest typem zwracanym przez właściwość niestandardową. To pole służy do tworzenia wystąpień obiektów bezpiecznych wątkowo do zwrócenia przez właściwość przez wywołanie GetInstance
metody . W związku z tym każdy wątek, który uzyskuje dostęp do właściwości rozszerzonej, otrzymuje własne wystąpienie zwracanego typu. Poniższy przykład dodaje właściwość o nazwie SampleExtension
, która jest typu SampleExtension
do My
przestrzeni nazw:
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
Dodawanie zdarzeń do obiektów niestandardowych My
Za pomocą My.Application
obiektu można uwidaczniać zdarzenia dla obiektów niestandardowych My
, rozszerzając klasę MyApplication
częściową w My
przestrzeni nazw. W przypadku projektów opartych na systemie Windows możesz kliknąć dwukrotnie węzeł Mój projekt w programie dla projektu w Eksplorator rozwiązań. W programie Visual Basic Project Projektant kliknij kartę Aplikacja, a następnie kliknij przycisk Wyświetl zdarzenia aplikacji. Zostanie utworzony nowy plik o nazwie ApplicationEvents.vb . Zawiera on następujący kod rozszerzający klasę MyApplication
:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Programy obsługi zdarzeń dla obiektów niestandardowych My
można dodać, dodając do klasy niestandardowe programy obsługi zdarzeń MyApplication
. Zdarzenia niestandardowe umożliwiają dodawanie kodu, który będzie wykonywany po dodaniu, usunięciu lub wystąpieniu zdarzenia programu obsługi zdarzeń. Należy pamiętać, że kod zdarzenia niestandardowego jest uruchamiany tylko wtedy, AddHandler
gdy użytkownik doda kod do obsługi zdarzenia. Rozważmy na przykład, że SampleExtension
obiekt z poprzedniej sekcji zawiera Load
zdarzenie, dla którego chcesz dodać niestandardową procedurę obsługi zdarzeń. Poniższy przykład kodu przedstawia niestandardową procedurę obsługi zdarzeń o nazwie SampleExtensionLoad
, która zostanie wywołana po wystąpieniu My.SampleExtension.Load
zdarzenia. Po dodaniu kodu do obsługi nowego My.SampleExtensionLoad
zdarzenia AddHandler
część tego niestandardowego kodu zdarzenia jest wykonywana. Metoda MyApplication_SampleExtensionLoad
jest uwzględniona w przykładzie kodu, aby pokazać przykład procedury obsługi zdarzeń obsługującej My.SampleExtensionLoad
zdarzenie. Pamiętaj, że SampleExtensionLoad
zdarzenie będzie dostępne po wybraniu opcji Moje zdarzenia aplikacji na liście rozwijanej po lewej stronie powyżej Edytora kodu podczas edytowania pliku 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
Wytyczne dotyczące projektowania
Podczas opracowywania rozszerzeń w My
przestrzeni nazw skorzystaj z poniższych wskazówek, aby zminimalizować koszty konserwacji składników rozszerzeń:
- Uwzględnij tylko logikę rozszerzenia. Logika zawarta w
My
rozszerzeniu przestrzeni nazw powinna zawierać tylko kod potrzebny do uwidocznienia wymaganych funkcji wMy
przestrzeni nazw. Ponieważ rozszerzenie będzie znajdować się w projektach użytkownika jako kod źródłowy, aktualizacja składnika rozszerzenia wiąże się z wysokim kosztem konserwacji i należy go uniknąć, jeśli to możliwe. - Zminimalizuj założenia projektu. Podczas tworzenia rozszerzeń
My
przestrzeni nazw nie należy zakładać zestawu odwołań, importów na poziomie projektu ani określonych ustawień kompilatora (na przykładOption Strict
wyłączonych). Zamiast tego zminimalizuj zależności i w pełni kwalifikują odwołania do wszystkich typów przy użyciu słowa kluczowegoGlobal
. Upewnij się również, że rozszerzenie jest kompilowane za pomocąOption Strict
polecenia , aby zminimalizować błędy w rozszerzeniu. - Izoluj kod rozszerzenia. Umieszczenie kodu w jednym pliku sprawia, że rozszerzenie można łatwo wdrożyć jako szablon elementu programu Visual Studio. Aby uzyskać więcej informacji, zobacz "Pakowanie i wdrażanie rozszerzeń" w dalszej części tego tematu. Umieszczenie całego
My
kodu rozszerzenia przestrzeni nazw w jednym pliku lub oddzielnym folderze w projekcie pomoże również użytkownikom zlokalizowaćMy
rozszerzenie przestrzeni nazw.
Projektowanie bibliotek klas dla My
Podobnie jak w przypadku większości modeli obiektów, niektóre wzorce projektowe działają dobrze w My
przestrzeni nazw, a inne nie. Podczas projektowania rozszerzenia My
przestrzeni nazw należy wziąć pod uwagę następujące zasady:
- Metody bezstanowe. Metody w
My
przestrzeni nazw powinny zapewnić kompletne rozwiązanie dla określonego zadania. Upewnij się, że wartości parametrów, które są przekazywane do metody, zawierają wszystkie dane wejściowe wymagane do ukończenia określonego zadania. Unikaj tworzenia metod, które opierają się na poprzednim stanie, takich jak otwarte połączenia z zasobami. - Wystąpienia globalne. Jedynym stanem, który jest utrzymywany w
My
przestrzeni nazw, jest globalny dla projektu. Na przykładMy.Application.Info
hermetyzuje stan, który jest współużytkowany w całej aplikacji. - Proste typy parametrów. Zachowaj prostotę, unikając złożonych typów parametrów. Zamiast tego utwórz metody, które nie przyjmują żadnych danych wejściowych parametrów lub przyjmują proste typy wejściowe, takie jak ciągi, typy pierwotne itd.
- Metody fabryki. Niektóre typy muszą być trudne do utworzenia wystąpienia. Zapewnienie metod fabrycznych jako rozszerzeń
My
przestrzeni nazw umożliwia łatwiejsze odnajdywanie i używanie typów, które należą do tej kategorii. Przykładem metody fabryki, która dobrze działa, jestMy.Computer.FileSystem.OpenTextFileReader
. Istnieje kilka typów strumieni dostępnych w programie .NET Framework. Dzięki określeniu plikówOpenTextFileReader
tekstowych pomaga użytkownikowi zrozumieć, który strumień ma być używany.
Te wytyczne nie wykluczają ogólnych zasad projektowania bibliotek klas. Są to raczej zalecenia zoptymalizowane dla deweloperów korzystających z języka Visual Basic i My
przestrzeni nazw. Ogólne zasady projektowania dotyczące tworzenia bibliotek klas można znaleźć w temacie Framework Design Guidelines (Wytyczne dotyczące projektowania struktury).
Pakowanie i wdrażanie rozszerzeń
Rozszerzenia przestrzeni nazw można dołączyć My
do szablonu projektu programu Visual Studio lub spakować rozszerzenia i wdrożyć je jako szablon elementu programu Visual Studio. Podczas tworzenia pakietów My
rozszerzeń przestrzeni nazw jako szablonu elementu programu Visual Studio możesz skorzystać z dodatkowych funkcji udostępnianych przez program Visual Basic. Te możliwości umożliwiają dołączenie rozszerzenia, gdy projekt odwołuje się do określonego zestawu, lub umożliwia użytkownikom jawne dodawanie My
rozszerzenia przestrzeni nazw przy użyciu strony Moje rozszerzenia w programie Visual Basic Project Projektant.
Aby uzyskać szczegółowe informacje na temat wdrażania My
rozszerzeń przestrzeni nazw, zobacz Pakowanie i wdrażanie niestandardowych rozszerzeń My Extensions.