Best Practice: Assemblys dynamisch laden, Klassen instanziieren und Methoden ausführen
Bei der dynamischen Programmierung ist es oft notwendig, Assemblys zu laden, Klassen zu instanziieren und deren Methoden aufzurufen. In diesem Artikel wird eine effiziente und sichere Implementierungsmethode vorgestellt.
Das dynamische Laden von Baugruppen kann mit der Methode Assembly.LoadFile
erfolgen, die den Pfad zur Baugruppendatei als Parameter erhält. Nachdem eine Assembly geladen wurde, können Sie deren Typen, Methoden und andere Details abrufen.
Es gibt viele Möglichkeiten, eine Klasse zu instanziieren und ihre Methoden aufzurufen. Bei dynamisch geladenen Baugruppen bietet die Verwendung von Reflexion jedoch Vorteile. Mit Reflection können Sie zur Laufzeit auf Mitglieder eines Typs zugreifen und diese aufrufen.
Traditionelle Methode:
Der folgende Code demonstriert die traditionelle Methode zum Umwandeln eines instanziierten Objekts in die erforderliche Schnittstelle:
<code class="language-csharp">Assembly assembly = Assembly.LoadFile(@"C:\dyn.dll"); IRunnable r = assembly.CreateInstance("TestRunner") as IRunnable; if (r == null) throw new Exception("broke"); r.Run();</code>
Empfohlene Methode: Verwenden Sie AppDomain:
Ein sichererer und flexiblerer Ansatz besteht darin, die Assembly zuerst in ihre eigene AppDomain zu laden. Dies ermöglicht eine bessere Isolierung und Kontrolle. Ersetzen Sie den vorherigen Code durch den folgenden Code:
<code class="language-csharp">var domain = AppDomain.CreateDomain("NewDomainName"); var type = typeof(IRunnable); var runnable = domain.CreateInstanceFromAndUnwrap(@"C:\dyn.dll", type.Name) as IRunnable; if (runnable == null) throw new Exception("broke"); runnable.Run();</code>
Wenn eine Baugruppe nicht mehr benötigt wird, kann sie mit der Methode AppDomain.Unload
deinstalliert werden. Dies hilft bei der Ressourcenverwaltung und vermeidet Speicherlecks.
Zusammenfassend ist die Verwendung von AppDomain zum Laden und Entladen von Assemblys der empfohlene Ansatz, da er mehr Flexibilität, Sicherheit und verbesserte Isolation bietet.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Klasse aus einer dynamisch geladenen Assembly sicher laden, instanziieren und ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!