2013-10-10 4 views
0

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

Может ли кто-нибудь сказать мне, почему это происходит, и если есть решение, которое я не вижу?

+0

Можете ли вы предоставить сообщение об исключении и информацию о стеке вызовов, которое у вас есть? –

+0

Это внутри кучки нитей. Если я его найду, вам придется немного подождать, и мне придется реализовывать политики исключений ... :) Я надеялся сделать это позже .. так любые догадки или догадки очень приветствуются –

+0

Вы пытались использовать Activator.CreateInstance (NameSpaceOfType.Type)? – FelProNet

ответ

0

Это embarresing ....

Причина этого потерпеть неудачу в том, что TimerClass имел свойство, которое определено интервал таймера. Это останавливает и запускает таймер, поэтому, когда это вызывается до создания таймера ... хорошо .... Затем он сбой ...

Мне очень жаль, что вы потратили свое время, но спасибо вам многое для того, чтобы помочь мне!

Смежные вопросы