Я пытаюсь динамически загрузить некоторые файлы.dll. Файлы — это плагины (self -, написанные на данный момент ), которые имеют по крайней мере один класс, реализующий MyInterface
. Для каждого файла я делаю следующее:
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);
}
}
}
Запуск этого вызывает исключение приведения, но я не могу найти обходной путь. В любом случае, мне интересно, почему это вообще не работает. Я ищу решение в.NET Framework 3.5.
Еще одна вещь, которая произошла со мной, заключалась в том, что я получил null
в p
после выполнения следующего в точке перед добавлением новой записи в _myList
в коде выше:
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
Этот код был первой попыткой загрузки плагинов, я еще не понял, почему p
было null
. Я надеюсь, что кто-то может привести меня к правильному пути:)