Des situations surviennent souvent dans lesquelles les développeurs doivent charger dynamiquement des assemblys, créer des instances de classe et exécuter des méthodes spécifiques. Un bon exemple est une application console devant charger une DLL, instancier une classe TestRunner
et appeler sa méthode Run()
.
Méthode traditionnelle
Une approche typique utilise Assembly.LoadFile()
pour charger l'assembly et la réflexion pour accéder et invoquer la méthode Run()
de la classe TestRunner
. Cependant, cela nécessite de convertir l'objet instancié en un type spécifique (par exemple, IRunnable
). Cela peut être problématique lorsqu'il s'agit d'assemblys générés dynamiquement.
Solution améliorée : tirer parti des AppDomains
Une solution supérieure et plus adaptable implique AppDomains. Cette technique crée un AppDomain distinct pour l'assembly chargé dynamiquement, améliorant ainsi l'isolation et la sécurité. Le code révisé illustre ceci :
<code class="language-csharp">var domain = AppDomain.CreateDomain("NewDomainName"); var t = typeof(TestRunner); var runnable = domain.CreateInstanceFromAndUnwrap("C:\myDll.dll", t.Name) as IRunnable; if (runnable == null) throw new Exception("broke"); runnable.Run();</code>
Avantages de l'utilisation d'AppDomains
Cette méthode offre plusieurs avantages clés :
Résumé
L'utilisation d'AppDomains offre une approche plus sécurisée et flexible pour charger dynamiquement des assemblys, créer des instances de classe et exécuter des méthodes. Ce contrôle amélioré est particulièrement précieux lorsque vous travaillez avec l'exécution de code dynamique.
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!