Я ищу объяснение для следующего -
У меня есть сборка, которую я загружаю, используя
Assembly assembly = Assembly.LoadFrom(filename);
Затем я зацикливаюсь на всех типах в сборке и хочу попытаться выяснить, реализует ли тип конкретный интерфейс и, если это так, я хочу экземпляр этого типа, я попробовал несколько вещей, которые не работали но когда я вернулся к самому базовому (и, вероятно, неэффективному) пути, я понял, что есть нечто более фундаментальное, чего я не понимаю -
foreach (Type t in assembly.GetTypes())
{
foreach (Type i in t.GetInterfaces())
{
if (i.FullName == pluginInterfaceType.FullName)
{
object o = assembly.CreateInstance(t.ToString());
IInterface plugin = (IInterface)o;
Эта последняя строка вызывает исключение InvalidCastException, несмотря на тот факт, что созданный тип определенно реализует этот интерфейс.
Еще больше - если я использую Activator.CreateInstance вместо Assembly.CreateInstance (что я не хочу делать), приведение к интерфейсу работает просто отлично.