Condividi tramite


Esempio Dynamic Type Resolution Technology

Aggiornamento: novembre 2007

In questo esempio viene illustrato il modo in cui gli host possono partecipare al processo di risoluzione dei tipi fornendo un gestore eventi che restituisce un assembly contenente il tipo richiesto. Si tratta di una tecnica avanzata, spesso utilizzata nelle applicazioni distribuite per migliorare la flessibilità e la tolleranza di errore.

Per informazioni sull'utilizzo degli esempi, vedere i seguenti argomenti:

Download sample

Per compilare l'esempio utilizzando il prompt dei comandi

  1. Aprire una finestra del prompt dei comandi, quindi spostarsi in una delle sottodirectory specifiche del linguaggio relative all'esempio.

  2. Dalla riga di comando digitare msbuild DynamicTypeResolveCS.sln o msbuild DynamicTypeResolveVB.sln, a seconda del linguaggio di programmazione che si desidera utilizzare.

Per compilare l'esempio utilizzando Visual Studio

  1. Aprire Esplora risorse, quindi spostarsi in una delle sottodirectory specifiche del linguaggio relative all'esempio.

  2. Fare doppio clic sull'icona relativa a DynamicTypeResolveCS.sln o DynamicTypeResolveVB.sln, a seconda del linguaggio di programmazione che si desidera utilizzare, per aprire il file in Visual Studio.

  3. Scegliere Compila soluzione dal menu Compila.

Per eseguire l'esempio

  1. Aprire la finestra del prompt dei comandi, quindi spostarsi nella directory contenente il file eseguibile compilato.

  2. Digitare DynamicTypeResolve.exe dalla riga di comando.

Nota:

L'esempio compila un'applicazione console. Per visualizzare l'output dell'applicazione, è necessario avviarla ed eseguirla in una finestra del prompt dei comandi.

Osservazioni

L'esempio tenta di creare un'istanza di un tipo inesistente. Tuttavia, gestisce anche gli errori di caricamento del tipo e crea dinamicamente il tipo necessario, evitando quindi la generazione di un'eccezione FileNotFoundException.

Nell'esempio vengono utilizzate le seguenti tecnologie e classi.

  • Reflection

    • AppDomain - L'evento AssemblyResolve di questa classe consente di aggiungere un gestore eventi da chiamare in caso di errore durante il caricamento del tipo.

    • Activator - Consente di creare istanze di un tipo il cui nome non è necessariamente noto in fase di compilazione.

    • MethodInfo - Consente di richiamare un metodo su un tipo. Il nome del metodo non è necessariamente noto in fase di compilazione.

    • AssemblyBuilder - Consente di creare un assembly dinamico in fase di esecuzione.

    • AssemblyName - Consente di definire l'identità univoca di un assembly. Nell'esempio questo tipo viene utilizzato semplicemente per assegnare un nome di testo all'assembly dinamico.

    • ModuleBuilder - Consente di compilare un modulo dinamico nell'assembly dinamico.

    • TypeBuilder - Questo tipo, derivato da Type, consente di compilare dinamicamente un tipo e di richiedere istanze dei tipi FieldBuilder, ConstructorBuilder e MethodBuilder, mediante i quali viene generato un tipo completo.

    • MethodBuilder - Consente di definire un metodo in un tipo dinamico.

    • ILGenerator - Il tipo MethodBuilder implementa il metodo GetILGenerator, che restituisce un'istanza del tipo ILGenerator. Questo tipo viene utilizzato per generare dinamicamente codice MSIL (Microsoft Intermediate Language).

  • Delegati ed eventi

    • ResolveEventHandler - Consente di indicare un metodo di callback da chiamare in caso di errore durante una risoluzione del tipo.

Vedere anche

Riferimenti

Activator

AppDomain

AssemblyBuilder

AssemblyBuilderAccess

AssemblyName

FileNotFoundException

ILGenerator

MethodAttributes

MethodBuilder

MethodInfo

ModuleBuilder

ResolveEventHandler

System.IO

System.Reflection

System.Reflection.Emit

TypeBuilder

Altre risorse

Reflection

Creazione di assembly e metodi dinamici

Generazione e compilazione dinamica di codice sorgente

Gestione e generazione di eventi

Eventi gestiti e non gestiti