我正在处理一些不幸的是很大程度上没有记录的现有代码,我无法理解它如何调用它所加载的插件的方法。编译器如何处理这些通用插件接口实例方法?
我目前的目标仅仅是进入通过插件管理器加载的方法之一,因为它会导致异常。然而,我不得不从源重建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