2013-10-07 4 views
0

У меня есть класс, который я пытаюсь создать с помощью Assembly и Activator, этот класс реализует интерфейс, однако, когда я запускаю экземпляр класса через условный который проверяет, что класс реализует его, я становлюсь ложным. В чем может быть проблема?Класс, созданный из DLL, кажется, не реализует интерфейс правильно

Мой код, где я проверяю для реализации:

 string className = MyClass; 
    Type type = null; 
    Assembly assembly = Assembly.LoadFile("@C:\\MyDLL", new Evidence(AppDomain.CurrentDomain.Evidence)); 
    type = assembly.GetType(className); 
    object instance = Activator.CreateInstance(type); 

    //never makes it past this conditional 
    if (!(instance is MyInterface) 
    { 
    //It always endsup in here, when it shouldn't. 
    System.Writeline("ERROR"); 
    } 
    else{ 
    //This is what needs to happen 
    } 

код для класса MyClass, который выходит за рамки всего этого, и в MyDLL

public class MyClass: MyInterface 
{ 
//Contents irrelevent to my problem 
} 

Я в недоумении о том, почему это не проходит условное. Могу ли я создать экземпляр класса неправильно? Также следует отметить, что я большой новичок, когда речь идет об использовании Assembly/Activator и использовании интерфейсов.

+3

Вы проверяете, что ваш экземпляр * не * ваш интерфейс? –

+0

Извините за то, насколько расплывчатым это кажется. Я добавил дополнительный код к сообщению. –

+2

Вы очень плохо убили этот струнный литерал. Это либо '@" C: \ MyDLL "или' "C: \\ MyDLL" '. –

ответ

3

Скорее всего, причина - как DLL, так и ваш код имеют собственную версию MyInterface. Это может происходить потому, что

  • один не хотел тратить время, чтобы придумать хороший уникальное имя для интерфейса,
  • кто-то решил поделиться интерфейс в качестве источника вместо с помощью ссылки на сборку,
  • хорошие назвали интерфейсы в разных пространствах имен, а вы - using неправильный.
+0

Это было очень полезно, и это оказалось причиной! Большое спасибо! :) –

0

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

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