我正在使用一些不幸的是大部分未记录的现有代码,并且我无法理解它如何调用它加载的插件的方法。
我目前的目标只是进入通过插件管理器加载的方法之一,因为它会导致异常。但是,我必须从源代码重建 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);
}
编译器如何在运行前知道这些plug.Instance.Method()
方法?
编辑:
我还没有完全解决这个问题,但是我错过了一个“PluginsService”文件,它部分反映了“GenericPluginServices”。我认为这个错误可能是由于我删除了与我正在研究的现已失效的插件相关的此类的部分内容。但是我认为发布这个其他代码片段会帮助解决这个问题。