2011-12-12 86 views
1

我通過反射裝載了一個.NET程序集,並且獲取它包含的所有類(此刻爲止)。在此之後,我試圖將類投給我100%肯定的類實現一個接口,但我收到此異常:無法轉換類型System.RuntimeType的對象類型MyInterface的通過反射導致類到基接口導致異常

MYDLL.DLL

public interface MyInterface 
{ 
    void MyMethod(); 
} 

MyOtherDLL.dll

public class MyClass : MyInterface 
{ 
    public void MyMethod() 
    { 
     ... 
    } 
} 

public class MyLoader 
{ 
    Assembly myAssembly = Assembly.LoadFile("MyDLL.dll"); 
    IEnumerable<Type> types = extension.GetTypes().Where(x => x.IsClass); 

    foreach (Type type in types) 
    { 
     ((MyInterface)type).MyMethod(); 
    } 
} 

我已經去掉了所有不是n代碼具完整。這基本上就是我所做的。我在this中看到Andi回答的問題似乎與我的相同,但我無法修復它。

回答

2

您正試圖將一個類型爲Type的.NET框架對象轉換爲您創建的接口。 Type對象沒有實現你的接口,所以它不能被轉換。您應該首先創建的對象,特定實例,例如通過使用Activator這樣的:

// this goes inside your for loop 
MyInterface myInterface = (MyInterface)Activator.CreateInstance(type, false); 
myInterface.MyMethod(); 

CreateInstance方法有可能滿足您的需求等overloades。

+0

你是對的。我忘了創建類型的實例。謝謝! – Stefano