2012-08-03 30 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