Extension de l’espace de noms My
dans Visual Basic
L’espace de noms My
dans Visual Basic expose des propriétés et des méthodes qui vous permettent de tirer facilement parti de la puissance du .NET Framework. L’espace de noms My
simplifie les problèmes de programmation courants, réduisant souvent une tâche difficile à une seule ligne de code. En outre, l’espace de noms My
est entièrement extensible pour vous permettre de personnaliser le comportement de My
et d’ajouter de nouveaux services à sa hiérarchie pour s’adapter aux besoins spécifiques de l’application. Cette rubrique explique à la fois comment personnaliser les membres existants de l’espace de noms My
et comment ajouter vos propres classes personnalisées à l’espace de noms My
.
Personnalisation de membres d’espace de noms My
existants
L’espace de noms My
dans Visual Basic expose les informations fréquemment utilisées sur votre application, votre ordinateur, etc. Pour obtenir une liste complète des objets de l’espace de noms My
, consultez My (référence). Vous devrez peut-être personnaliser les membres existants de l’espace de noms My
afin qu’ils correspondent mieux aux besoins de votre application. Toute propriété d’un objet dans l’espace de noms My
qui n’est pas en lecture seule peut être définie sur une valeur personnalisée.
Par exemple, supposons que vous utilisez fréquemment l’objet My.User
pour accéder au contexte de sécurité actuel de l’utilisateur exécutant votre application. Toutefois, votre entreprise utilise un objet utilisateur personnalisé pour exposer des informations et des fonctionnalités supplémentaires pour les utilisateurs au sein de l’entreprise. Dans ce scénario, vous pouvez remplacer la valeur par défaut de la propriété My.User.CurrentPrincipal
par une instance de votre propre objet principal personnalisé, comme illustré dans l’exemple suivant :
My.User.CurrentPrincipal = CustomPrincipal
La définition de la propriété CurrentPrincipal
sur l’objet My.User
modifie l’identité sous laquelle l’application s’exécute. L’objet My.User
retourne à son tour des informations sur l’utilisateur nouvellement spécifié.
Ajout de membres à des objets My
Les types retournés à partir de My.Application
et My.Computer
sont définis en tant que classes Partial
. Par conséquent, vous pouvez étendre les objets My.Application
et My.Computer
en créant une classe Partial
nommée MyApplication
ou MyComputer
. Cette classe ne peut pas être une classe Private
. Si vous spécifiez la classe dans le cadre de l’espace de noms My
, vous pouvez ajouter des propriétés et des méthodes qui seront incluses avec les objets My.Application
ou My.Computer
.
L’exemple suivant ajoute une propriété nommée DnsServerIPAddresses
à l’objet 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
Ajout d’objets personnalisés à l’espace de noms My
Bien que l’espace de noms My
fournit des solutions pour de nombreuses tâches de programmation courantes, vous pouvez rencontrer des tâches que l’espace de noms My
ne traite pas. Par exemple, votre application peut accéder aux services d’annuaire personnalisés pour les données utilisateur, ou votre application peut utiliser des assemblies qui ne sont pas installés par défaut avec Visual Basic. Vous pouvez étendre l’espace de noms My
pour inclure des solutions personnalisées aux tâches courantes spécifiques à votre environnement. L’espace de noms My
peut facilement être étendu pour ajouter de nouveaux membres pour répondre aux besoins croissants de l’application. En outre, vous pouvez déployer vos extensions d’espace de noms My
sur d’autres développeurs en tant que modèle Visual Basic.
Ajout de membres à l’espace de noms My
Étant donné que My
est un espace de noms comme n’importe quel autre, vous pouvez y ajouter des propriétés de niveau supérieur en ajoutant simplement un module et en spécifiant un Namespace
de My
. Annotez le module avec l’attribut HideModuleName
, comme indiqué dans l’exemple suivant. L’attribut HideModuleName
garantit que IntelliSense n’affiche pas le nom du module lorsqu’il affiche les membres de l’espace de noms My
.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Pour ajouter des membres à l’espace de noms My
, ajoutez les propriétés nécessaires au module. Pour chaque propriété ajoutée à l’espace de noms My
, ajoutez un champ privé de type ThreadSafeObjectProvider(Of T)
, où le type est le type retourné par votre propriété personnalisée. Ce champ est utilisé pour créer des instances d’objet thread-safe à retourner par la propriété en appelant la méthode GetInstance
. Par conséquent, chaque thread qui accède à la propriété étendue reçoit sa propre instance du type retourné. L’exemple suivant ajoute une propriété nommée SampleExtension
de type SampleExtension
à l’espace de noms My
:
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
Ajout d’événements à des objets My
personnalisés
Vous pouvez utiliser l’objet My.Application
pour exposer des événements pour vos objets My
personnalisés en étendant la classe partielle MyApplication
dans l’espace de noms My
. Pour les projets Windows, vous pouvez double-cliquer sur le nœud Mon projet pour votre projet dans Explorateur de solutions. Dans le Concepteur de projets Visual Basic, cliquez sur l’onglet Application, puis sur le bouton Afficher les événements d’application. Un nouveau fichier nommé ApplicationEvents.vb sera créé. Il contient le code suivant pour étendre la classe MyApplication
:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Vous pouvez ajouter des gestionnaires d’événements pour vos objets My
personnalisés en ajoutant des gestionnaires d’événements personnalisés à la classe MyApplication
. Les événements personnalisés vous permettent d’ajouter du code qui s’exécute lorsqu’un gestionnaire d’événements est ajouté ou supprimé, ou que l’événement est déclenché. Notez que le code AddHandler
d’un événement personnalisé s’exécute uniquement si le code est ajouté par un utilisateur pour gérer l’événement. Par exemple, considérez que l’objet SampleExtension
de la section précédente a un événement Load
pour lequel vous souhaitez ajouter un gestionnaire d’événements personnalisé. L’exemple de code suivant montre un gestionnaire d’événements personnalisé nommé SampleExtensionLoad
qui est appelé lorsque l’événement My.SampleExtension.Load
se produit. Lorsque le code est ajouté pour gérer le nouvel événement My.SampleExtensionLoad
, la partie AddHandler
de ce code d’événement personnalisé est exécutée. La méthode MyApplication_SampleExtensionLoad
est incluse dans l’exemple de code pour afficher un exemple de gestionnaire d’événements qui gère l’événement My.SampleExtensionLoad
. Notez que l’événement SampleExtensionLoad
sera disponible lorsque vous sélectionnez l’option Mes événements d’application dans la liste déroulante de gauche au-dessus de l’éditeur de code lorsque vous modifiez le fichier 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
Recommandations en matière de conception
Lorsque vous développez des extensions dans l’espace de noms My
, utilisez les instructions suivantes pour réduire les coûts de maintenance de vos composants d’extension :
- Incluez uniquement la logique d’extension. La logique incluse dans l’extension d’espace de noms
My
doit inclure uniquement le code nécessaire pour exposer les fonctionnalités requises dans l’espace de nomsMy
. Étant donné que votre extension réside dans des projets utilisateur en tant que code source, la mise à jour du composant d’extension entraîne un coût de maintenance élevé et doit être évitée si possible. - Réduisez les hypothèses de projet. Lorsque vous créez vos extensions de l’espace de noms
My
, ne partez pas du principe qu’il y a un ensemble de références, d’importations au niveau du projet ou de paramètres de compilateur spécifiques (par exemple,Option Strict
désactivé). Réduisez plutôt les dépendances et qualifiez entièrement toutes les références de type à l’aide du mot cléGlobal
. Vérifiez également que l’extension est compilée avecOption Strict
pour réduire les erreurs dans l’extension. - Isolez le code d’extension. Le fait de placer le code dans un seul fichier rend votre extension facilement déployable en tant que modèle d’élément Visual Studio. Pour plus d’informations, consultez « Empaquetage et déploiement d’extensions » plus loin dans cette rubrique. Le placement de tout le code d’extension d’espace de noms
My
dans un fichier unique ou un dossier distinct dans un projet permet également aux utilisateurs de localiser l’extension d’espace de nomsMy
.
Conception de bibliothèques de classes pour My
Comme c’est le cas avec la plupart des modèles objet, certains modèles de conception fonctionnent bien dans l’espace de noms My
et d’autres non. Lors de la conception d’une extension à l’espace de noms My
, tenez compte des principes suivants :
- Méthodes sans état. Les méthodes de l’espace de noms
My
doivent fournir une solution complète à une tâche spécifique. Vérifiez que les valeurs de paramètre passées à la méthode fournissent toutes les entrées requises pour terminer la tâche particulière. Évitez de créer des méthodes qui s’appuient sur un état antérieur, tel que les connexions ouvertes aux ressources. - Instances globales. Le seul état conservé dans l’espace de noms
My
est global au projet. Par exemple,My.Application.Info
encapsule l’état partagé dans l’application. - Types de paramètres simples. Gardez les choses simples en évitant les types de paramètres complexes. Créez plutôt des méthodes qui ne prennent pas d’entrée de paramètre ou qui prennent des types d’entrée simples tels que des chaînes, des types primitifs, etc.
- Méthodes de fabrique. Certains types sont nécessairement difficiles à instancier. Fournir des méthodes de fabrique en tant qu’extensions à l’espace de noms
My
vous permet de découvrir et de consommer plus facilement les types qui appartiennent à cette catégorie.My.Computer.FileSystem.OpenTextFileReader
est un exemple de méthode d’usine qui fonctionne bien. Il existe plusieurs types de flux disponibles dans le .NET Framework. En spécifiant spécifiquement les fichiers texte, leOpenTextFileReader
aide l’utilisateur à comprendre quel flux utiliser.
Ces instructions n’empêchent pas les principes de conception généraux pour les bibliothèques de classes. Il s’agit plutôt de recommandations optimisées pour les développeurs qui utilisent Visual Basic et l’espace de noms My
. Pour obtenir des principes de conception généraux pour la création de bibliothèques de classes, consultez Recommandations de conception d’infrastructure.
Empaquetage et déploiement d’extensions
Vous pouvez inclure des extensions d’espace de noms My
dans un modèle de projet Visual Studio, ou vous pouvez empaqueter vos extensions et les déployer en tant que modèle d’élément Visual Studio. Lorsque vous empaquetez vos extensions d’espace de noms My
en tant que modèle d’élément Visual Studio, vous pouvez tirer parti des fonctionnalités supplémentaires fournies par Visual Basic. Ces fonctionnalités vous permettent d’inclure une extension lorsqu’un projet fait référence à un assembly particulier ou de permettre aux utilisateurs d’ajouter explicitement votre extension d’espace de noms My
à l’aide de la page Mes extensions du concepteur de projets Visual Basic.
Pour plus d’informations sur le déploiement d’extensions d’espace de noms My
, consultez Empaquetage et déploiement des extensions My personnalisées.