2011-04-05 38 views
2

我已經閱讀了兩天的反射示例,我似乎無法將所有東西拼湊在一起以適合我需要的東西。事實上,我以爲我使用反射,直到我注意到我的「使用System.Reflection」灰顯。 :-)CSharp:我如何動態地調用一個類(帶有構造函數)和它的方法?

我有一個xml文件,其中包含我的類名和其中包含的方法。方法的順序甚至名稱都可以改變。一旦我閱讀了他們,我希望能夠執行它們。看起來很簡單。

我有以下測試代碼:

​​

tb爲空。我只是試圖獲得創建類的正確API,但我甚至不知道我擁有的其餘部分是否有效。

有什麼建議嗎?

謝謝

編輯:添加名稱空間。 Activator.CreateInstance返回錯誤,該構造函數未找到..它在那裏。

+0

作爲現有對象,你採取在CastleWindsor,團結,NInject偷看,或控制容器的任何其他反轉?聽起來像是適合這個問題。 – 2011-04-05 18:56:16

回答

2

你確定你指定完整的類名包括命名空間嗎?沒有名稱空間,結果將爲空。

+0

已經有一段時間了,因爲我已經嘗試過動態實例化,但我相信你需要一個裝配限定的名字,不是嗎?例如「MyAwesomeNamespace.WickedClassName,ReallyRadLibrary」 – 2011-04-05 18:53:50

+0

謝謝。我添加了命名空間,但是現在我的Activator.CreateInstance返回了一個錯誤,說明找不到構造函數。構造函數在那裏(同名,公共)。 – Jason 2011-04-05 18:54:48

+0

@Jason,你可以發佈ctor簽名嗎?您可能希望驗證/確認參數的順序和類型。有沒有其他錯誤的細節? – 2011-04-05 18:59:18

3

類名必須是完全限定的(包括命名空間和最有可能的程序集)才能解析它。如果您知道該類在您當前執行的程序集中,則可以使用Assembly.GetExecutingAssembly()。GetType()

0

對於GetType,您必須提供完全限定的名稱。你可以得到它使用

MyObject.GetType().AssemblyQualifiedName; 
一邊
相關問題