Condividi tramite


Estensione dello spazio dei nomi My in Visual Basic

Aggiornamento: novembre 2007

Lo spazio dei nomi My in Visual Basic espone proprietà e metodi che consentono di sfruttare facilmente la potenza di .NET Framework. Lo spazio dei nomi My semplifica problemi di programmazione comuni, spesso riducendo un'attività difficile a una sola riga di codice. Inoltre, lo spazio dei nomi My è completamente estensibile così da rendere possibile la personalizzazione del comportamento di My e l'aggiunta di servizi nuovi alla gerarchia per adattarsi alle necessità specifiche dell'applicazione. In questo argomento viene indicato come personalizzare i membri esistenti dello spazio dei nomi My e come aggiungere le proprie classi personalizzate allo spazio dei nomi My.

Sommario degli argomenti

  • Personalizzazione dei membri esistenti dello spazio dei nomi My

  • Aggiunta di membri agli oggetti My

  • Aggiunta di oggetti personalizzati allo spazio dei nomi My

  • Aggiunta dei membri allo spazio dei nomi My

  • Aggiunta di eventi agli oggetti My personalizzati

  • Indicazioni per la progettazione

  • Progettazione delle librerie di classi per My

  • Assemblaggio e distribuzione delle estensioni

Personalizzazione dei membri esistenti dello spazio dei nomi My

Lo spazio dei nomi My in Visual Basic espone di frequente le informazioni utilizzate sull'applicazione, sul computer e così via. Per l'elenco completo degli oggetti nello spazio dei nomi My, vedere Riferimenti a oggetti My. Potrebbe essere necessario personalizzare i membri esistenti dello spazio dei nomi My in modo da corrispondere meglio alle necessità dell'applicazione. Qualsiasi proprietà di un oggetto nello spazio dei nomi My che non sia di sola lettura può essere impostata su un valore personalizzato.

Si supponga, ad esempio, che l'oggetto My.User venga utilizzato di frequente per accedere al contesto di sicurezza corrente per l'utente che esegue l'applicazione. L'azienda invece usa un oggetto utente personalizzato per esporre le informazioni aggiuntive e le funzionalità per gli utenti all'interno dell'azienda. In questo scenario, è possibile sostituire il valore predefinito della proprietà My.User.CurrentPrincipal con un'istanza del proprio oggetto principale personalizzato, come indicato nell'esempio seguente.

My.User.CurrentPrincipal = CustomPrincipal

L'impostazione della proprietà CurrentPrincipal sull'oggetto My.User modifica l'identità sotto la quale viene eseguita l'applicazione. L'oggetto My.User, a sua volta, restituisce le informazioni sull'utente appena specificato.

Aggiunta di membri agli oggetti My

I tipi restituiti da My.Application e My.Computer sono definiti come classi Partial. Pertanto, è possibile estendere gli oggetti My.Application e My.Computer creando una classe Partial denominata MyApplication o MyComputer. La classe non può essere Private. Se si specifica la classe come parte dello spazio dei nomi My, è possibile aggiungere le proprietà e i metodi che saranno inclusi con gli oggetti My.Application o My.Computer.

Nell'esempio riportato di seguito viene aggiunta una proprietà denominata DnsServerIPAddresses all'oggetto 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

Aggiunta di oggetti personalizzati allo spazio dei nomi My

Sebbene lo spazio dei nomi My fornisca soluzioni per molte attività di programmazione comuni, alcune attività potrebbero non essere incluse nello spazio dei nomi My. Ad esempio, quando l'applicazione accede a servizi directory personalizzati per i dati dell'utente o utilizza assembly che non sono installati per impostazione predefinita con Visual Basic. È possibile estendere lo spazio dei nomi My in modo da includere soluzioni personalizzate alle attività comuni specifiche all'ambiente. Lo spazio dei nomi My può essere facilmente esteso in modo da aggiungere membri nuovi per soddisfare le necessità crescenti dell'applicazione. Inoltre, è possibile distribuire le estensioni dello spazio dei nomi My agli altri sviluppatori come modello di Visual Basic.

Aggiunta dei membri allo spazio dei nomi My

Dal momento che My è come qualsiasi altro spazio dei nomi, è possibile aggiungervi le proprietà di livello superiore semplicemente aggiungendo un modulo e specificando uno Namespace di My. Annotare il modulo con l'attributo HideModuleName come indicato nell'esempio seguente. L'attributo HideModuleName assicura che il nome del modulo non venga visualizzato in IntelliSense quando visualizza i membri dello spazio dei nomi My.

Namespace My
  <HideModuleName()> _
  Module MyCustomModule

  End Module
End Namespace

Per aggiungere membri allo spazio dei nomi My, aggiungere le proprietà al modulo secondo le necessità. Per ogni proprietà aggiunta allo spazio dei nomi My, aggiungere un campo privato di tipo ThreadSafeObjectProvider(Of T), dove il tipo è il tipo restituito dalla proprietà personalizzata. Questo campo è utilizzato per creare istanze di oggetti thread-safe che devono essere restituite dalla proprietà chiamando il metodo GetInstance. Di conseguenza, ogni thread che accede alla proprietà estesa riceve la propria istanza del tipo restituito. Nell'esempio seguente viene aggiunta la proprietà SampleExtension di tipo SampleExtension allo spazio dei nomi 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

Aggiunta di eventi agli oggetti My personalizzati

È possibile utilizzare l'oggetto My.Application per esporre eventi per gli oggetti My personalizzati estendendo la classe parziale MyApplication nello spazio dei nomi My. Per i progetti basati su Windows, è possibile fare doppio clic sul nodo Progetto in Esplora soluzioni. In Progettazione progetti di Visual Basic, fare clic sulla scheda Application e quindi sul pulsante View Application Events. Verrà creato un nuovo file denominato ApplicationEvents.vb contenente il codice seguente per l'estensione della classe MyApplication.

Namespace My
  Partial Friend Class MyApplication
  End Class
End Namespace

È possibile aggiungere i gestori eventi per gli oggetti My personalizzati aggiungendo i gestori eventi personalizzati alla classe MyApplication. Gli eventi personalizzati consentono di aggiungere il codice che verrà eseguito quando un gestore eventi viene aggiunto, rimosso o generato. Si noti che il codice AddHandler per un evento personalizzato viene eseguito solo se il codice viene aggiunto da un utente per gestire l'evento. Ad esempio, si consideri che l'oggetto SampleExtension della sezione precedente abbia un evento Load per il quale si desidera aggiungere un gestore eventi personalizzato. L'esempio di codice seguente mostra un gestore eventi personalizzato denominato SampleExtensionLoad che verrà richiamato quando si verifica l'evento My.SampleExtension.Load. Quando il codice viene aggiunto per gestire il nuovo evento My.SampleExtensionLoad, viene eseguita la parte AddHandler di questo codice dell'evento personalizzato. Il metodo MyApplication_SampleExtensionLoad è incluso nell'esempio di codice per mostrare come un gestore eventi gestisca l'evento My.SampleExtensionLoad. Si noti che l'evento SampleExtensionLoad sarà disponibile quando si seleziona l'opzione Eventi applicazioni nell'elenco a discesa di sinistra sopra l'editor del codice quando si modifica il file 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

Indicazioni per la progettazione

Quando si sviluppano estensioni allo spazio dei nomi My, utilizzare le linee guida seguenti per consentire di minimizzare i costi di manutenzione dei componenti di estensione.

  • Includere solo la logica dell'estensione. Nella logica compresa nell'estensione dello spazio dei nomi My deve essere incluso solo il codice necessario per esporre la funzionalità richiesta nello spazio dei nomi My. Poiché l'estensione risiederà nei progetti utente come codice sorgente, aggiornando il componente di estensione si incorre in costi di manutenzione elevati che dovrebbero essere evitati, se possibile.

  • Minimizzare le ipotesi di progetto. Quando si creano le estensioni dello spazio dei nomi My, è opportuno non presupporre un insieme di riferimenti, importazioni a livello di progetto o impostazioni specifiche del compilatore (ad esempio, l'oggetto Option Strict disattivato). Minimizzare, invece, le dipendenze e qualificare in modo completo ogni tipo di riferimento utilizzando la parola chiave Global. Assicurarsi inoltre che l'estensione venga compilata con Option Strict attivato per ridurre gli errori nell'estensione.

  • Isolare il codice dell'estensione. Inserendo il codice in un singolo file è possibile distribuire facilmente l'estensione come un modello di elemento di Visual Studio. Per ulteriori informazioni, vedere "Assemblaggio e distribuzione delle estensioni" più avanti in questo argomento. Anche inserendo tutto il codice di estensione dello spazio dei nomi My in un singolo file o in una cartella separata si semplifica il reperimento dell'estensione dello spazio dei nomi My da parte degli utenti.

Progettazione delle librerie di classi per My

Come per la maggior parte dei modelli a oggetti, solo alcuni modelli di progettazione funzionano nello spazio dei nomi My. Quando si progetta un'estensione allo spazio dei nomi My, considerare i principi seguenti:

  • Metodi senza stato. I metodi nello spazio dei nomi My devono fornire una soluzione completa a un'attività specifica. Assicurarsi che i valori di parametro passati al metodo forniscano tutto l'input richiesto per completare la particolare attività. Evitare di creare metodi che si basano sullo stato precedente, ad esempio l'apertura di connessioni alle risorse.

  • Istanze globali. L'unico stato gestito nello spazio dei nomi My è globale per il progetto. Ad esempio, My.Application.Info incapsula lo stato condiviso in tutta l'applicazione.

  • Semplici tipi di parametro. Semplificare le operazioni, evitando tipi di parametro complessi. Creare invece metodi che non utilizzino input di parametri o che utilizzino tipi di input semplici, ad esempio stringhe, tipi primitivi e così via.

  • Metodi factory. Creare l'istanza di alcuni tipi è un'operazione effettivamente difficile. Fornendo i metodi factory come estensioni allo spazio dei nomi My è possibile individuare più facilmente e utilizzare tipi che rientrano in questa categoria. Un esempio di un metodo factory che funziona bene è My.Computer.FileSystem.OpenTextFileReader. Ci sono molti tipi di flusso disponibili in .NET Framework. Specificando file di testo in modo esplicito, OpenTextFileReader consente all'utente di capire quale flusso utilizzare.

Queste linee guida non precludono i principi di progettazione generali per le librerie di classi. Piuttosto, sono raccomandazioni ottimizzate per gli sviluppatori che utilizzano Visual Basic e lo spazio dei nomi My. Per i principi di progettazione generali per la creazione di librerie di classi, vedere Linee guida di progettazione per lo sviluppo di librerie di classi.

Assemblaggio e distribuzione delle estensioni

È possibile includere le estensioni dello spazio dei nomi My in un modello di progetto di Visual Studio o comprimere le estensioni e distribuirle come modello di elemento di Visual Studio. Quando si comprimono le estensioni dello spazio dei nomi My come modello di elemento di Visual Studio, è possibile sfruttare le funzionalità aggiuntive fornite da Visual Basic. Queste funzionalità consentono di includere un'estensione quando un progetto fa riferimento a un particolare assembly o consente agli utenti di aggiungere in modo esplicito l'estensione dello spazio dei nomi My utilizzando la pagina Estensioni My di Progettazione progetti di Visual Basic.

Per le informazioni dettagliate sulla distribuzione delle estensioni dello spazio dei nomi My, vedere Assemblaggio e distribuzione delle estensioni My personalizzate.

Vedere anche

Concetti

Assemblaggio e distribuzione delle estensioni My personalizzate

Estensione del modello di applicazione Visual Basic

Personalizzazione degli oggetti disponibili in My

Riferimenti

Pagina Estensioni My, Progettazione progetti (Visual Basic)

Pagina Applicazione, Progettazione progetti (Visual Basic)

Partial (Visual Basic)