Heim >Backend-Entwicklung >C++ >Wie kann ich Typen aus Assemblynamen in .NET dynamisch laden und instanziieren?

Wie kann ich Typen aus Assemblynamen in .NET dynamisch laden und instanziieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-19 09:16:09737Durchsuche

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

Assembly-Typen zur Laufzeit dynamisch laden und instanziieren

In einigen Fällen müssen Sie möglicherweise ein Objekt zur Laufzeit instanziieren, ohne die Assembly-Referenz des Projekts ändern zu können. Dies tritt auf, wenn Sie nur den Assemblynamen und den vollständig qualifizierten Typnamen der erforderlichen Klasse kennen.

Methode:

Um diese Herausforderung zu meistern, können Sie die Reflexions- und Assembly-Lademechanismen von .NET verwenden, um die folgenden Schritte auszuführen:

  1. Verwenden Sie die Methode Assembly.LoadFrom, um die Assembly in den Speicher zu laden. Diese Methode kann eine Assembly auch dann laden, wenn der absolute Pfad zur Assembly unbekannt ist, wodurch sie für Assemblys geeignet ist, die sich in einem anderen Verzeichnis befinden oder in den Global Assembly Cache (GAC) geladen werden.
  2. Typmetadaten aus einer geladenen Assembly mithilfe der Methode Type.GetType abrufen. Für diesen Schritt ist ein vollständig qualifizierter Typname als Parameter erforderlich.
  3. Rufen Sie Type mit dem erhaltenen Activator.CreateInstance-Objekt auf, um den erforderlichen Typ zu instanziieren.

Hier ist ein vereinfachtes Codebeispiel:

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

Alternative zur dynamischen Typauflösung:

Wenn Sie sowohl den Namen der Assemblydatei als auch den Typnamen haben, können Sie die Methode Activator.CreateInstance(assemblyName, typeName) verwenden. Mit dieser Methode kann .NET Typen automatisch auflösen, ohne dass eine manuelle Reflexion erforderlich ist. Wenn Parsing-Probleme auftreten, können Sie einen try/catch-Block einfügen, um das spezifische Assembly-Verzeichnis zu durchsuchen, oder versuchen, ihn manuell mit der zuvor erwähnten Assembly.LoadFrom-Methode zu laden.

Durch die Verwendung dieser Techniken haben Sie die Flexibilität, Typen zur Laufzeit dynamisch zu laden und zu instanziieren, auch wenn Sie keinen Zugriff auf den physischen Speicherort der Assembly haben oder in Ihrem Projekt nicht direkt darauf verweisen.

Das obige ist der detaillierte Inhalt vonWie kann ich Typen aus Assemblynamen in .NET dynamisch laden und instanziieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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