Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Extension de l’espace
L’espace My de noms 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 My de noms simplifie les problèmes de programmation courants, réduisant souvent une tâche difficile à une seule ligne de code. En outre, l’espace My de noms est entièrement extensible pour vous permettre de personnaliser le comportement et d’ajouter de nouveaux services à sa hiérarchie pour s’adapter aux besoins spécifiques de My l’application. Cette rubrique explique à la fois comment personnaliser les membres existants de l’espace My de noms et comment ajouter vos propres classes personnalisées à l’espace My de noms.
Personnalisation des membres d’espace de noms existants My
L’espace My de noms dans Visual Basic expose les informations fréquemment utilisées sur votre application, votre ordinateur, etc. Pour obtenir la liste complète des objets de l’espace My de noms, consultez Ma référence. Vous devrez peut-être personnaliser les membres existants de l’espace My de noms afin qu’ils correspondent mieux aux besoins de votre application. Toute propriété d’un objet dans l’espace My de noms 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 My.User.CurrentPrincipal propriété par une instance de votre propre objet principal personnalisé, comme illustré dans l’exemple suivant :
My.User.CurrentPrincipal = CustomPrincipal
La définition de la CurrentPrincipal propriété 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 My objets
Les types retournés et My.ApplicationMy.Computer sont définis en tant que Partial classes. Par conséquent, vous pouvez étendre les objets et My.Computer les My.Application étendre en créant une Partial classe nommée MyApplication ou MyComputer. La classe ne peut pas être une Private classe. Si vous spécifiez la classe dans le cadre de l’espace My de noms, vous pouvez ajouter des propriétés et des méthodes qui seront incluses avec les objets ou My.Computer les My.Application objets.
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 My de noms
Bien que l’espace My de noms fournit des solutions pour de nombreuses tâches de programmation courantes, vous pouvez rencontrer des tâches que l’espace My de noms 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 assemblys qui ne sont pas installés par défaut avec Visual Basic. Vous pouvez étendre l’espace My de noms pour inclure des solutions personnalisées aux tâches courantes spécifiques à votre environnement. L’espace My de noms 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 My extensions d’espace de noms sur d’autres développeurs en tant que modèle Visual Basic.
Ajout de membres à l’espace My de noms
Étant donné qu’il My s’agit d’un espace de noms comme n’importe quel autre espace de noms, vous pouvez y ajouter des propriétés de niveau supérieur en ajoutant simplement un module et en spécifiant un Namespace .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 My de noms.
Namespace My
<HideModuleName()>
Module MyCustomModule
End Module
End Namespace
Pour ajouter des membres à l’espace My de noms, ajoutez les propriétés si nécessaire au module. Pour chaque propriété ajoutée à l’espace My de noms, 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 GetInstance méthode. 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 My de noms :
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 personnalisés My
Vous pouvez utiliser l’objet My.Application pour exposer des événements pour vos objets personnalisés My en étendant la MyApplication classe partielle dans l’espace My de noms. Pour les projets Windows, vous pouvez double-cliquer sur le nœud Mon projet pour votre projet dans l’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 MyApplication classe :
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
Vous pouvez ajouter des gestionnaires d’événements pour vos objets personnalisés en ajoutant des gestionnaires d’événements personnalisés My à la MyApplication classe. Les événements personnalisés vous permettent d’ajouter du code qui s’exécutera lorsqu’un gestionnaire d’événements est ajouté, supprimé ou déclenché. Notez que le AddHandler code 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 Load événement 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 sera appelé lorsque l’événement My.SampleExtension.Load se produit. Lorsque le code est ajouté pour gérer le nouvel My.SampleExtensionLoad événement, la AddHandler partie de ce code d’événement personnalisé est exécutée. La MyApplication_SampleExtensionLoad méthode 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 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 My de noms, 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
Myd’espace de noms doit inclure uniquement le code nécessaire pour exposer les fonctionnalités requises dans l’espaceMyde noms. É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 du projet. Lorsque vous créez vos extensions de l’espace
Myde noms, ne supposez pas un ensemble de références, d’importations au niveau du projet ou de paramètres de compilateur spécifiques (par exemple,Option Strictdésactivés). Au lieu de cela, réduisez les dépendances et qualifiez entièrement toutes les références de type à l’aide duGlobalmot clé. Vérifiez également que l’extension est compilée pourOption Strictré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
Mycode d’extension d’espace de noms dans un fichier unique ou un dossier distinct dans un projet permet également aux utilisateurs de localiser l’extensionMyd’espace de noms.
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 My de noms et d’autres ne le font pas. Lors de la conception d’une extension à l’espace My de noms, tenez compte des principes suivants :
- Méthodes sans état. Les méthodes de l’espace
Myde noms 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, telles que les connexions ouvertes aux ressources. - Instances globales. Le seul état conservé dans l’espace
Myde noms est global au projet. Par exemple,My.Application.Infoencapsule l’état partagé dans l’application. - Types de paramètres simples. Gardez les choses simples en évitant les types de paramètres complexes. Au lieu de cela, créez 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
Myde noms vous permet de découvrir et de consommer plus facilement les types qui appartiennent à cette catégorie. Voici un exemple de méthode d’usine qui fonctionne bien.My.Computer.FileSystem.OpenTextFileReaderIl existe plusieurs types de flux disponibles dans le .NET Framework. En spécifiant spécifiquement les fichiers texte, l’utilisateurOpenTextFileReaderpeut comprendre le flux à utiliser.
Ces instructions n’empêchent pas les principes généraux de conception 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 My de noms. Pour obtenir des principes de conception généraux pour la création de bibliothèques de classes, consultez Les instructions de conception d’infrastructure.
Empaquetage et déploiement d’extensions
Vous pouvez inclure des My extensions d’espace de noms 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 My extensions d’espace de noms 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 permet aux utilisateurs d’ajouter explicitement votre My extension d’espace de noms à 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, consultez Empaquetage Myet déploiement de mes extensions personnalisées.