1

我正在用 C# 编写一个剪贴板/图像上传工具,其中一个组合键会例如制作屏幕截图,然后将图像发送到插件,然后插件处理 URL 的上传和返回。

现在,这些插件需要保存设置,并且这些设置需要在我的应用程序中可编辑,所以我想我会使用我前段时间编写的数据保存类,并将该类的初始化实例的引用传递给插件。

想法是将整个类放入一个包含中,插件编写者可以将其包含在他们的项目中以处理数据,但是尽管插件和主应用程序都使用完全相同的代码,但我得到一个关于版本不同的错误,即:

{"[A]CedInc.Persistence.XMLPersistenceDictionary.savenode 不能转换为 [B]CedInc.Persistence.XMLPersistenceDictionary.savenode。类型 A 源自 'CloudBoard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'上下文 'Default' 在位置 'C:\git\CloudBoard\CloudBoard\bin\Debug\CloudBoard.exe'。类型 B 源自 'CloudBoard FTP 上传插件,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null'位置 'C:\git\CloudBoard\CloudBoard\bin\Debug\plugins\CloudBoard FTP 上传 plugin.dll' 的上下文 'LoadFrom'。"}

我的问题是:是否可以将自定义类的实例传递给插件,而不必将其放入程序集中以由插件本身加载?如果是这样,如何?欢迎任何想法/建议!我有点卡在这里。

4

2 回答 2

1

虽然我会推荐一个共享程序集版本,但您也可以为您的插件作者提供一个带有预定义类和方法名称的模板代码文件。然后您可以使用反射来搜索加载的程序集以找到与您的预定义签名匹配的类和方法。一旦找到方法,就很容易调用它们。

于 2012-06-18T17:16:37.357 回答
0

您希望插件根本不引用您的任何代码吗?

在这种情况下,您可能能够在框架程序集中找到一些接口,这些接口可以传递给插件而不是类。也许IDictionaryIDictionary<string,string>会工作。这样插件将不需要引用任何程序集进行序列化,并且您将能够传递自定义实现。作为插件作者的附带好处将更方便对他们的插件进行单元测试(使用具体类形成一个随机库,这要困难得多)。

于 2012-06-18T17:40:06.817 回答