Dynamisches Laden von Assemblys und instanziierten Klassen zur Laufzeit
Ist es möglich, ein Objekt zur Laufzeit zu instanziieren, ohne explizit auf die Assembly im Projekt zu verweisen, wenn man nur den DLL-Dateinamen und den Klassennamen kennt? Diese Klasse implementiert normalerweise eine Schnittstelle, die eine Typkonvertierung nach der Instanziierung ermöglicht.
Assembly-Name: library.dll Typname: Company.Project.Classname
Kein Dateipfad
Kann nicht verwendet werden, da es keinen absoluten DLL-Pfad gibt. Die DLL befindet sich möglicherweise im Anwendungsstammverzeichnis, system32 oder im GAC. Assembly.LoadFile
Lösung
Es ist machbar. Verwenden Sie, um eine Assembly in den Speicher zu laden. Verwenden Sie dann Assembly.LoadFrom
, um eine Instanz des gewünschten Typs zu generieren. Verwenden Sie zunächst die Reflexion, um den Typ zu finden. Activator.CreateInstance
<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyNice.dll"); Type type = assembly.GetType("MyType"); object instanceOfMyType = Activator.CreateInstance(type);</code>
Verbesserte Lösung
Angesichts eines Assembly-Dateinamens und eines Typnamens kann in einen Typ aufgelöst werden. Dies kann zur Fehlerbehandlung mit einem Try/Catch-Block umschlossen werden. Wenn dies fehlschlägt, werden Verzeichnisse durchsucht, in denen möglicherweise andere Assemblys vorhanden sind, und bei Bedarf werden die vorherigen Methoden angewendet. Activator.CreateInstance(assemblyName, typeName)
Das obige ist der detaillierte Inhalt vonKann ich eine Klasse zur Laufzeit instanziieren, wenn ich nur ihre DLL und ihren Typnamen kenne?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!