2012-08-03 31 views
1

我正在處理一些不幸的是很大程度上沒有記錄的現有代碼,我無法理解它如何調用它所加載的插件的方法。編譯器如何處理這些通用插件接口實例方法?

我目前的目標僅僅是進入通過插件管理器加載的方法之一,因爲它會導致異常。然而,我不得不從源重建pluginManager來獲取調試符號,當我引用這個新的DLL版本時,編譯器會引發懷疑。

的代碼出現在插件加載到plug.Instance然後訪問像這樣plug.Instance.ReturnLeaNumber(); 此編譯器錯誤是有道理的具體方法,因爲它不知道該插件的詳細信息。讓我感到困惑的是編譯器在運行時沒有初始化插件時在運行時間之前知道哪些地方有效。我可以通過現在不適用於舊版DLL的代碼!

這是一個程序加載插件的例子。

plug = GenericServicePlugins.AvailablePlugins.Find(Application.StartupPath + "\\Dlls\\SchoolInterface.dll"); 
// Compiler doesn't like this next line anymore though 
plug.Instance.Initialize(null, null); 

如果有我的重建圖書館和以前的工作一個之間的差異,我不能告訴如何爲版本匹配在我們的源代碼控制的人。希望能從哪裏開始尋找一些建議!

public interface IGenericPluginMasterInterface 
{ 
    String returnName(); 
    void Initialize(ExceptionStringResources.Translate ExceptionStrings); 
    Object ExecuteFunction(String macAddress, bool log, String functionName, LoginCredentials logonCredentials, WebConfiguration webConfig, 
          Int64 dataLinkId, DataLinkParam[] dataLinkParams, String dataName, 
          DataParam[] dataParams, Object[] additionalParams); 
} 

Rest of Manager code on PasteBin

如何編譯器知道在運行之前這些plug.Instance.Method()的方法呢?

編輯:

我不太制定了這一點還沒有,但有一個「PluginsService」文件我錯過了這部分反映了「GenericPluginServices」。 我認爲這個錯誤可能是因爲我刪除了這個類的一部分,這個部分與我正在研究的一個現在不存在的插件有關。不過,我想發佈這個其他代碼片段將有助於這個問題。

PluginService.cs code GenericPluginService code

+0

Find是什麼類型的返回?那是'AvailablePlugin'嗎? – 2012-08-03 10:41:38

+0

FindPlugin方法返回這個「colAvailablePlugins = new Types.AvailablePlugins();」 – Amicable 2012-08-03 10:47:57

+0

我的意思是'find',而不是'FindPlugin',但是我在代碼 – 2012-08-03 10:48:33

回答

1

Find返回AvailablePlugin,所以.InstanceIGenericPluginMasterInterface類型;如果是這樣,確實;這.Instance.ReturnLeaNumber()不可能工作......

可以工作(沒有引入泛型的一些等)時,如果.Instance實際返回dynamic的唯一途徑。使用dynamic,在運行時處發生名稱/方法解析。編譯器非常慎重地對待dynamic,例如根據反射(對於簡單情況)或IDynamicMetaObjectProvider(對於更復雜的情況)將所有解析延遲到運行時。然而,如果你的代碼與編譯的代碼不匹配,那麼:我們不能告訴你它是什麼。國際海事組織,最好的選擇是得到工作 DLL,並在反射器看它看看它實際上在做什麼,以及它是如何不同於你有源代碼。

實際上,嚴格來說,它仍然可以用您粘貼的代碼來做到這一點,但只有plug鍵入爲dynamicdynamic plug = ...

+0

中發現它,謝謝Marc,給了我一些東西來看看:) – Amicable 2012-08-03 10:55:28