У меня есть интерфейс IPlugin. Это реализовано в абстрактном классе, который называется TimerClass. Затем есть класс с именем Test, который наследуется от TimerClass.Класс, который наследуется от абстрактного класса, который реализует интерфейс, и загружает это рефлексивно
Класс Test находится в его собственной DLL и загружается отражением.
Это работает отлично, если я не использую TimerClass (просто реализуйте IPlugin в тесте).
Мой код, который загружает класс Test рефлекторно как интерфейс (IPlugin) выглядит следующим образом:
private IPlugin GetInterface(Assembly assembly)
{
IPlugin PluginFound = null;
var iPluginType = typeof (IPlugin);
var types = assembly.GetExportedTypes();
foreach (var type in types)
if (iPluginType.IsAssignableFrom(type))
{
var operation = Activator.CreateInstance(type) as IPlugin;
if (operation != null)
{
PluginFound = operation;
break;
}
}
return PluginFound;
}
Эта часть кода: var operation = Activator.CreateInstance(type) as IPlugin;
сбой, когда класс Test загружен.
Сначала мне показалось, что он пытается загрузить абстрактный класс TimerClass, но это кажется далекой выборкой, поскольку этот класс не реализован в той же DLL. Я также отладил его и посмотрел на сборку, и мне кажется, что загружен правильный класс ...
Может ли кто-нибудь сказать мне, почему это происходит, и если есть решение, которое я не вижу?
Можете ли вы предоставить сообщение об исключении и информацию о стеке вызовов, которое у вас есть? –
Это внутри кучки нитей. Если я его найду, вам придется немного подождать, и мне придется реализовывать политики исключений ... :) Я надеялся сделать это позже .. так любые догадки или догадки очень приветствуются –
Вы пытались использовать Activator.CreateInstance (NameSpaceOfType.Type)? – FelProNet