Ich versuche, einige DLL-Dateien dynamisch zu laden. Die Dateien sind Plugins (für den Moment selbst geschrieben), die mindestens eine Klasse haben, die MyInterface
implementiert. Für jede Datei, mache ich folgendes:C# übergibt eine Klasse an eine Schnittstellenliste
Dictionary<MyInterface, bool> _myList;
// ...code
Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
var myI = type.GetInterface("MyInterface");
if(myI != null)
{
if ((myI.Name == "MyInterface") && !type.IsAbstract)
{
var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}
}
}
Ausführen dieses eine gegossene Ausnahme verursacht, aber ich kann eine Abhilfe nicht finden. Jedenfalls frage ich mich, warum das überhaupt nicht funktioniert. Ich suche nach einer Lösung in .NET Framework 3.5.
Eine andere Sache, die mir passiert war die folgende an dem Punkt, nach dem Ausführen vor dem Hinzufügen eines neuen Eintrags in _myList
in dem obigen Code null
in p
bekommen:
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
Dieser Code wurde der erste Versuch, die beim Laden Plugins, ich habe nicht herausgefunden, warum noch null
war. Ich hoffe, jemand kann mich auf den richtigen Weg führen :)
dieser Code funktioniert nicht, was ist x und wo Sie es init? – devundef
In Ihrem obigen Code-Snippet ist "x" in "if (x! = Null)" wirklich "myI"? –
Sie sollten auch überprüfen, dass der Typ einen Standardkonstruktor hat, da der Code davon ausgeht. –