Partager via


Extension de l’espace My de noms en Visual Basic

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 My d’espace de noms doit inclure uniquement le code nécessaire pour exposer les fonctionnalités requises dans l’espace My de 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 My de 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 Strict désactivés). Au lieu de cela, réduisez les dépendances et qualifiez entièrement toutes les références de type à l’aide du Global mot clé. Vérifiez également que l’extension est compilée pour Option Strict 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 My code d’extension d’espace de noms dans un fichier unique ou un dossier distinct dans un projet permet également aux utilisateurs de localiser l’extension My d’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 My de 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 My de noms 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. 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 My de 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.OpenTextFileReader Il existe plusieurs types de flux disponibles dans le .NET Framework. En spécifiant spécifiquement les fichiers texte, l’utilisateur OpenTextFileReader peut 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.

Voir aussi