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 :
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). Type.GetType
. Cette étape nécessite un nom de type complet comme paramètre. 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>
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!