2010-09-06 69 views
0

我是這個東西的小菜鳥。我想製作一個使用插件的C#程序(作爲一種學習方式)。然而,我不明白我要去哪裏錯在這裏:C#,反射,插件,程序集

PluginClass = a.CreateInstance("MBPlugin"); 

PluginClass是Object類型。但它總是空的。 a是Assembly的類型。 程序集絕對包含一個名爲MBPlugin的類。那到底是什麼?

+1

你可能會更好從MEF開始:http://msdn.microsoft.com/en-us/library/dd460648.aspx – Richard 2010-09-06 08:40:56

回答

2

這種類型被稱爲只是沒有命名空間的MBPlugin是不尋常的。您應該提供命名空間限定的名稱,例如「MyCompany.Plugins.MBPlugin」。

我用於一些項目
+0

好吧,好吧。所以......很明顯,我知道命名空間是因爲我做了'測試插件'......但是如何正常地獲取程序集中的名稱空間? – Xenoprimate 2010-09-06 08:41:48

+0

@Motig:完全取決於你的插件如何配置。你怎麼知道班級名稱?要求插件被命名爲特定名稱是很奇怪的......我的意思是,你可以查看「Assembly.GetTypes()」的結果並找到一個具有正確名稱的類,但它會是奇。 – 2010-09-06 08:50:29

+0

那麼這通常如何完成? – Xenoprimate 2010-09-06 09:03:18

0

一種方法:

創建定義你期待的所有插件的方法的接口IPlugin。在我的情況下,這主要是一個Register()函數,它使插件有機會做任何事情。

然後使用Assembly.GetTypes來枚舉程序集中定義的所有類型,並查找定義該接口的類(使用typeof(IPlugin).IsAssignableFrom())。繼續並使用這些類型。

此外,您可能想看看像MEF這樣的框架(除其他外)興奮地想要什麼。