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)