C #приведение класса к списку интерфейсов

Я пытаюсь динамически загрузить некоторые файлы.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. Я надеюсь, что кто-то может привести меня к правильному пути:)

6
задан Phil 8 August 2012 в 16:03
поделиться