Estensione dello spazio dei nomi My
in Visual Basic
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 i problemi di programmazione comuni, riducendo spesso un'attività difficile a una singola riga di codice. Inoltre, lo spazio dei nomi My
è completamente estendibile in modo da poter personalizzare il comportamento di My
e aggiungere nuovi servizi alla gerarchia per adattarsi a specifiche esigenze dell'applicazione. Questo argomento illustra sia come personalizzare i membri esistenti dello spazio dei nomi My
che come aggiungere classi personalizzate allo spazio dei nomi My
.
Personalizzazione dei membri esistenti dello spazio dei nomi My
Lo spazio dei nomi My
in Visual Basic espone informazioni frequenti sull'applicazione, sul computer e altro ancora. Per un elenco completo degli oggetti nello spazio dei nomi My
, vedere Riferimenti di My. Potrebbe essere necessario personalizzare i membri esistenti dello spazio dei nomi My
in modo che corrispondano meglio alle esigenze dell'applicazione. Qualsiasi proprietà di un oggetto nello spazio dei nomi My
che non è di sola lettura può essere impostata su un valore personalizzato.
Si supponga, ad esempio, di usare spesso l'oggetto My.User
per accedere al contesto di sicurezza corrente per l'utente che esegue l'applicazione. Tuttavia, l'azienda usa un oggetto utente personalizzato per esporre informazioni e funzionalità aggiuntive 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 entità di sicurezza personalizzato, come illustrato nell'esempio seguente:
My.User.CurrentPrincipal = CustomPrincipal
L'impostazione della proprietà CurrentPrincipal
nell'oggetto My.User
modifica l'identità con cui viene eseguita l'applicazione. L'oggetto My.User
, a sua volta, restituisce informazioni sull'utente appena specificato.
Aggiunta di membri agli oggetti My
I tipi restituiti da My.Application
e My.Computer
vengono 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 una classe Private
. Se si specifica la classe come parte dello spazio dei nomi My
, è possibile aggiungere proprietà e metodi che verranno inclusi negli oggetti My.Application
o My.Computer
.
Nell'esempio seguente 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, è possibile trovare attività per cui lo spazio dei nomi My
non è utile. Ad esempio, l'applicazione potrebbe accedere a servizi directory personalizzati per i dati dell'utente oppure potrebbe usare assembly non installati per impostazione predefinita con Visual Basic. È possibile estendere lo spazio dei nomi My
in modo da includere soluzioni personalizzate ad attività comuni specifiche dell'ambiente. Lo spazio dei nomi My
può essere esteso facilmente per aggiungere nuovi membri e soddisfare le crescenti esigenze dell'applicazione. Inoltre, è possibile distribuire le estensioni dello spazio dei nomi My
ad altri sviluppatori come modello di Visual Basic.
Aggiunta di membri allo spazio dei nomi My
Poiché My
è uno spazio dei nomi come qualsiasi altro spazio dei nomi, è possibile aggiungervi proprietà di primo livello aggiungendo semplicemente un modulo e specificando un valore per Namespace
di My
. Annotare il modulo con l'attributo HideModuleName
come illustrato nell'esempio seguente. L'attributo HideModuleName
garantisce che IntelliSense non visualizzi il nome del modulo 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 proprietà in base alle esigenze del modulo. 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 viene utilizzato per creare istanze di oggetto thread-safe che la proprietà restituisce 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 una proprietà denominata 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 a oggetti personalizzati My
È possibile usare l'oggetto My.Application
per esporre eventi per gli oggetti personalizzati My
estendendo la classe parziale MyApplication
nello spazio dei nomi My
. Per i progetti basati su Windows, è possibile fare doppio clic sul nodo Progetto personale per il progetto in Esplora soluzioni. In Creazione progetti di Visual Basic fare clic sulla scheda Applicazione e quindi sul pulsante Visualizza eventi applicazione. Verrà creato un nuovo file denominato ApplicationEvents.vb. Contiene il codice seguente per estendere la classe MyApplication
:
Namespace My
Partial Friend Class MyApplication
End Class
End Namespace
È possibile aggiungere i gestori dell'evento per gli oggetti personalizzati My
aggiungendo i gestori dell'evento personalizzati alla classe MyApplication
. Gli eventi personalizzati consentono di aggiungere codice che verrà eseguito quando un gestore dell'evento viene aggiunto, rimosso o viene generato un evento. 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. Si consideri, ad esempio, che l'oggetto SampleExtension
della sezione precedente ha un evento Load
per cui si vuole aggiungere un gestore dell'evento personalizzato. Nell'esempio di codice seguente viene illustrato un gestore dell'evento personalizzato denominato SampleExtensionLoad
che verrà richiamato quando si verifica l'evento My.SampleExtension.Load
. Quando viene aggiunto il codice per gestire il nuovo evento My.SampleExtensionLoad
, viene eseguita la parte AddHandler
di questo codice evento personalizzato. Il metodo MyApplication_SampleExtensionLoad
è incluso nell'esempio di codice per mostrare un esempio di gestore dell'evento che gestisce l'evento My.SampleExtensionLoad
. Si noti che l'evento SampleExtensionLoad
sarà disponibile quando si seleziona l'opzione Eventi applicazione personali nell'elenco a discesa a sinistra sopra l'editor di 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
Linee guida di progettazione
Quando si sviluppano estensioni nello spazio dei nomi My
, usare le linee guida seguenti per ridurre al minimo i costi di manutenzione dei componenti dell'estensione:
- Includere solo la logica di estensione. La logica inclusa nell'estensione dello spazio dei nomi
My
deve includere solo il codice necessario per esporre le funzionalità necessarie nello spazio dei nomiMy
. Poiché l'estensione risiederà nei progetti dell'utente come codice sorgente, l'aggiornamento del componente dell'estensione comporta un costo elevato di manutenzione e deve essere evitato, se possibile. - Ridurre al minimo i presupposti del progetto. Quando si creano le estensioni dello spazio dei nomi
My
, non assumere un set di riferimenti, importazioni a livello di progetto o impostazioni specifiche del compilatore (ad esempio,Option Strict
disattivato). Ridurre invece al minimo le dipendenze e qualificare completamente tutti i tipi di riferimenti usando la parola chiaveGlobal
. Assicurarsi inoltre che l'estensione esegua la compilazione conOption Strict
attivata per ridurre al minimo gli errori nell'estensione. - Isolare il codice dell'estensione. L'inserimento del codice in un singolo file rende l'estensione facilmente distribuibile come modello di elemento di Visual Studio. Per altre informazioni, vedere "Creazione di pacchetti e distribuzione delle estensioni" più avanti in questo argomento. L'inserimento di tutto il codice dell'estensione dello spazio dei nomi
My
in un singolo file o in una cartella separata in un progetto consentirà inoltre agli utenti di individuare l'estensione dello spazio dei nomiMy
.
Progettazione di librerie di classi per My
Come accade per la maggior parte dei modelli a oggetti, alcuni schemi progettuali funzionano bene nello spazio dei nomi My
e altri no. Quando si progetta un'estensione per lo 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 dei parametri passati al metodo forniscano tutto l'input necessario per completare l'attività specifica. Evitare di creare metodi che si basano sullo stato precedente, ad esempio connessioni aperte alle risorse. - Istanze globali. L'unico stato mantenuto nello spazio dei nomi
My
è globale per il progetto. Ad esempio,My.Application.Info
incapsula lo stato condiviso in tutta l'applicazione. - Tipi di parametro semplici. Semplificare le operazioni evitando tipi di parametri complessi. Creare invece metodi che non accettano input di parametri o che accettano tipi di input semplici, ad esempio stringhe, tipi primitivi e così via.
- Metodi factory. Per alcuni tipi creare un'istanza è necessariamente difficile. Specificare metodi factory come estensioni per lo spazio dei nomi
My
consente di individuare e utilizzare più facilmente i tipi che rientrano in questa categoria. Un esempio di metodo factory che funziona bene èMy.Computer.FileSystem.OpenTextFileReader
. In .NET Framework sono disponibili diversi tipi di flusso. Specificando in modo specifico i file di testo,OpenTextFileReader
consente all'utente di capire quale flusso usare.
Queste linee guida non impediscono principi di progettazione generali per le librerie di classi. Si tratta piuttosto di raccomandazioni ottimizzate per gli sviluppatori che usano Visual Basic e lo spazio dei nomi My
. Per i principi di progettazione generali per la creazione di librerie di classi, vedere Linee guida per la progettazione del framework.
Creazione di pacchetti e distribuzione delle estensioni
È possibile includere le estensioni dello spazio dei nomi My
in un modello di progetto di Visual Studio oppure creare un pacchetto delle estensioni e distribuirle come modello di elemento di Visual Studio. Quando si creano pacchetti di 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 consentono agli utenti di aggiungere in modo esplicito l'estensione dello spazio dei nomi My
usando la pagina Estensioni My di Creazione progetti di Visual Basic.
Per informazioni dettagliate su come distribuire le estensioni dello spazio dei nomi My
, vedere Creazione di pacchetti e distribuzione delle estensioni My personalizzate.
Vedi anche
- Assemblaggio e distribuzione delle estensioni My personalizzate
- Estensione del modello di applicazione Visual Basic
- Personalizzazione degli oggetti disponibili in My
- Pagina Estensioni My, Creazione progetti
- Application Page, Project Designer (Visual Basic) (Pagina Applicazione, Creazione progetti (Visual Basic))
- Partial