Résolution de type dynamique, exemple de technologie

Mise à jour : novembre 2007

Cet exemple montre comment les hôtes peuvent participer au processus de résolution des types en fournissant un gestionnaire d'événements qui retourne un assembly contenant le type demandé. Il s'agit d'une technique avancée, à utiliser principalement dans des applications distribuées pour faciliter la flexibilité et la tolérance de pannes.

Pour plus d'informations sur l'utilisation des exemples, consultez les rubriques suivantes :

Download sample

Pour générer l'exemple à partir de l'invite de commandes :

  1. Ouvrez une fenêtre d'invite de commandes et accédez à l'un des sous-répertoires spécifiques aux différents langages pour l'exemple.

  2. Tapez msbuild DynamicTypeResolveCS.sln ou msbuild DynamicTypeResolveVB.sln, selon votre choix de langage de programmation, à la ligne de commande.

Pour générer l'exemple à l'aide de Visual Studio :

  1. Ouvrez l'Explorateur Windows et accédez à l'un des sous-répertoires spécifiques aux différents langages de l'exemple.

  2. Double-cliquez sur l'icône de DynamicTypeResolveCS.sln ou de DynamicTypeResolveVB.sln, selon votre choix de langage de programmation, pour ouvrir le fichier dans Visual Studio.

  3. Dans le menu Générer, cliquez sur Générer la solution.

Pour exécuter l'exemple

  1. Ouvrez une fenêtre d'invite de commandes et accédez au répertoire qui contient le fichier exécutable généré.

  2. Tapez DynamicTypeResolve.exe à la ligne de commande.

Remarque :

L'exemple génère une application console. Vous devez la lancer et l'exécuter dans une fenêtre d'invite de commandes pour consulter sa sortie.

Notes

L'exemple tente d'instancier un type inexistant. Toutefois, l'exemple gère également les échecs de la charge du type et crée dynamiquement le type requis, ce qui évite la levée de FileNotFoundException.

L'exemple utilise les technologies et classes suivantes :

  • Réflexion

    • AppDomain L'événement AssemblyResolve de cette classe est utilisé pour ajouter un gestionnaire d'événements appelé en cas d'échec de la charge du type.

    • Activator Utilisé pour créer des instances d'un type dont le nom n'est pas nécessairement connu au moment de la compilation.

    • MethodInfo Utilisé pour appeler une méthode sur un type, lorsque le nom de la méthode n'est pas nécessairement connu au moment de la compilation.

    • AssemblyBuilder Utilisé pour émettre un assembly dynamique au moment de l'exécution.

    • AssemblyName Utilisé pour définir l'identité unique d'un assembly. L'exemple utilise ce type de la façon la plus simple, pour affecter à l'assembly dynamique un nom sous forme de texte.

    • ModuleBuilder Utilisé pour générer un module dynamique dans l'assembly dynamique.

    • TypeBuilder Ce type, dérivé de Type, est utilisé pour générer dynamiquement un type. Grâce à ce type, vous pouvez demander des instances des types FieldBuilder, ConstructorBuilderet MethodBuilder. À l'aide de ces types, l'exemple génère un type complet.

    • MethodBuilder Utilisé pour définir une méthode dans un type dynamique.

    • ILGenerator Le type MethodBuilder implémente la méthode GetILGenerator, qui retourne une instance du type ILGenerator. Ce type est utilisé pour générer dynamiquement le code MSIL (Microsoft Intermediate Language).

  • Délégués et événements

    • ResolveEventHandler Utilisé pour indiquer une méthode de rappel à appeler en cas d'échec de résolution d'un type.

Voir aussi

Référence

Activator

AppDomain

AssemblyBuilder

AssemblyBuilderAccess

AssemblyName

FileNotFoundException

ILGenerator

MethodAttributes

MethodBuilder

MethodInfo

ModuleBuilder

ResolveEventHandler

System.IO

System.Reflection

System.Reflection.Emit

TypeBuilder

Autres ressources

Réflexion

Émission d'assemblys et de méthodes dynamiques

Génération et compilation de code source dynamique

Gestion et déclenchement d'événements

Événements managés et non managés