Partager via


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 noms My. É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 avec Option 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 noms My.

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, le OpenTextFileReader 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.

Voir aussi