Maison > développement back-end > C++ > Comment puis-je charger et instancier dynamiquement des types à partir de noms d'assembly dans .NET ?

Comment puis-je charger et instancier dynamiquement des types à partir de noms d'assembly dans .NET ?

Mary-Kate Olsen
Libérer: 2025-01-19 09:16:09
original
744 Les gens l'ont consulté

How Can I Dynamically Load and Instantiate Types from Assembly Names in .NET?

Charger et instancier dynamiquement les types d'assembly au moment de l'exécution

Dans certains cas, vous devrez peut-être instancier un objet au moment de l'exécution sans pouvoir modifier la référence d'assembly du projet. Cela se produit lorsque vous connaissez uniquement le nom de l’assembly et le nom de type complet de la classe requise.

Méthode :

Pour surmonter ce défi, vous pouvez utiliser les mécanismes de réflexion et de chargement d'assembly de .NET pour effectuer les étapes suivantes :

  1. Utilisez la méthode Assembly.LoadFrom pour charger l'assembly en mémoire. Cette méthode peut charger un assembly même si le chemin absolu de l’assembly est inconnu, ce qui la rend adaptée aux assemblys situés dans un répertoire différent ou chargés dans le Global Assembly Cache (GAC).
  2. Récupérez les métadonnées de type d'un assembly chargé à l'aide de la méthode Type.GetType. Cette étape nécessite un nom de type complet comme paramètre.
  3. Appelez Type avec l'objet Activator.CreateInstance obtenu pour instancier le type requis.

Voici un exemple de code simplifié :

<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyCoolAssembly.dll");
Type myType = assembly.GetType("MyNamespace.MyType");
object myInstance = Activator.CreateInstance(myType);</code>
Copier après la connexion

Alternative à la résolution de type dynamique :

Si vous avez à la fois le nom du fichier assembly et le nom du type, vous pouvez utiliser la méthode Activator.CreateInstance(assemblyName, typeName). Cette méthode permet à .NET de résoudre automatiquement les types sans réflexion manuelle. Si des problèmes d'analyse surviennent, vous pouvez inclure un bloc try/catch pour rechercher le répertoire d'assembly spécifique, ou essayer de le charger manuellement à l'aide de la méthode Assembly.LoadFrom mentionnée précédemment.

En utilisant ces techniques, vous avez la flexibilité de charger et d'instancier dynamiquement des types au moment de l'exécution, même si vous n'avez pas accès à l'emplacement physique de l'assembly ou si vous ne le référencez pas directement dans votre projet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal