Heim >Backend-Entwicklung >C++ >Wie kann ich Typen aus Assemblynamen in .NET dynamisch laden und instanziieren?
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:
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. Type.GetType
abrufen. Für diesen Schritt ist ein vollständig qualifizierter Typname als Parameter erforderlich. 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!