我試圖動態加載一些.dll文件。文件是插件(目前爲自己編寫),至少有一個類實現了MyInterface
。對於每一個文件,我做了以下內容:C#將一個類轉換爲接口列表
Dictionary<MyInterface, bool> _myList;
// ...code
Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
var myI = type.GetInterface("MyInterface");
if(myI != null)
{
if ((myI.Name == "MyInterface") && !type.IsAbstract)
{
var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}
}
}
運行這會導致轉換異常,但我不能找到一個解決辦法。無論如何,我想知道爲什麼這根本不起作用。我正在尋找.NET Framework 3.5中的解決方案。
發生在我身上的另一件事是在上面的代碼中添加新條目_myList
之前運行在該點以下後得到null
在p
:上裝載
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
此代碼是第一次嘗試插件,我沒有找到爲什麼p
是null
呢。 我希望有人能帶領我走向正確的道路:)
這段代碼不工作,x是什麼,你在哪裏啓動它? – devundef 2012-08-08 15:51:50
在上面的代碼片段中,「if(x!= null)」中的「x」實際上應該是「myI」? – 2012-08-08 15:52:17
您還應該驗證該類型是否具有默認構造函數,因爲您的代碼假定了這一點。 – 2012-08-08 15:52:38