Heim > Backend-Entwicklung > C++ > Wie kann ich eine Klasse aus einer dynamisch geladenen Assembly sicher laden, instanziieren und ausführen?

Wie kann ich eine Klasse aus einer dynamisch geladenen Assembly sicher laden, instanziieren und ausführen?

DDD
Freigeben: 2025-01-21 02:23:08
Original
358 Leute haben es durchsucht

How to Safely Load, Instantiate, and Run a Class from a Dynamically Loaded Assembly?

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.

Baugruppe wird geladen

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.

Klassen instanziieren und Methoden aufrufen

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Baugruppe deinstallieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage