2015-10-09 34 views
1

我正在一個包含多個項目的解決方案中工作。我需要從不同項目中的一個項目訪問方法。我們有一個單獨的項目來處理傳入數據包和更新本地數據,然後從這我需要訪問主應用程序項目中的一個方法(它向用戶顯示一個自定義通知)訪問項目外的方法

在主應用程序中,我有一個方法具有以下簽名

Public Sub NotifyRemoved(ByVal message As String) 

在數據包處理的項目,我已經使用調用來調用方法,像這樣嘗試:

removedItems是字符串列表。

「MainForm」是上述方法所在的類。

For Each removed As String In removedItems 
    Dim newType As Type = Type.GetType("MainForm") 
    Dim newConstructor As ConstructorInfo = newType.GetConstructor(Type.EmptyTypes) 
    Dim newClassObject As Object = newConstructor.Invoke(New Object() {}) 

    Dim newMethod As MethodInfo = newType.GetMethod("NotifyRemoved") 
    newMethod.Invoke(newClassObject, New Object() {removed & " has been removed from list"}) 

Next 

當我通過調試Type.GetType()方法返回任何內容併爲此拋出下一行的異常運行這個......我曾嘗試使用事件等,但所有的方法我可以其他途徑發現似乎需要兩個類之間的直接訪問。

有什麼想法?

在此先感謝。

+1

引用項目日常只需添加含有MainForm的項目的引用,然後直接調用它使用'項目名。 MainForm' –

+0

你爲什麼試圖使用反射而不是僅僅添加項目引用? (請注意,我並不是說這在架構上必然是正確的方法,但添加對基於UI的項目的引用是可疑的,但是問題中沒有足夠的信息來真正得出結論,一般來說,當您需要參考代碼,您*添加引用*到該代碼。) – David

回答

0

使用另一個項目中的.dll添加項目引用。

項目|添加參考|瀏覽(以.dll文件找到)

一旦它被添加,那麼你可以通過Project.Class.Routine

+0

如果兩個項目在相同的解決方案中,添加項目引用將優於添加DLL引用。 (即使它們不在相同的解決方案中,您至少不希望將DLL引用直接添加到構建輸出,而是添加到更受控制的位置。)構建輸出上的文件鎖定可能會導致Visual Studio中出現問題(或任何環境),如果你引用該構建輸出。 – David