我正在處理一些不幸的是很大程度上沒有記錄的現有代碼,我無法理解它如何調用它所加載的插件的方法。編譯器如何處理這些通用插件接口實例方法?
我目前的目標僅僅是進入通過插件管理器加載的方法之一,因爲它會導致異常。然而,我不得不從源重建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
Find是什麼類型的返回?那是'AvailablePlugin'嗎? – 2012-08-03 10:41:38
FindPlugin方法返回這個「colAvailablePlugins = new Types.AvailablePlugins();」 – Amicable 2012-08-03 10:47:57
我的意思是'find',而不是'FindPlugin',但是我在代碼 – 2012-08-03 10:48:33