使用excel插件防止单个对象的多个实例

时间:2013-03-08 15:51:25

标签: c# excel excel-dna

我有两项插入excel的技术。

一个是实现IDTExtensibility2接口的COM Addin。 另一种是通过Excel-DNA实现的RTD服务器。

这两个对象都是由excel实例化的。他们每个人都需要在运行时访问第三个对象以获取数据并将其推送到excel。

由于我无法将此对象交给excel插件,因此我将其设为单例,希望每个插件都可以共享同一个实例。

不幸的是,在运行代码时,每个代码都看不到另一个创建的单例对象的实例。

如何让两个插件引用同一个对象?

让我们假设两个插件都需要保留,我宁愿不进入进程间通信设置。

TL / DR 两个excel插件需要共享第三个对象,但是使第三个对象成为单个对象不起作用,因为每个excel插件都看不到另一个插件创建的第三个对象的实例。

这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

您的加载项正在单独的AppDomain中加载。一种选择是将COM加载项集成到Excel-DNA加载项中。这可能很简单:

  1. 将您的COM加载项代码添加到Excel-DNA项目中,
  2. 将您的加载项类更改为从ExcelComAddIn(而不是IDTExtensibility2)派生,
  3. 通过AutoOpen
  4. ExcelComAddInHelper.LoadComAddIn(...)加载该课程

    否则您将需要某种App -main间通信。您可以设置Marshal-By-Reference对象,将其设置为与加载的加载项对应的Object对象的COMAddIn属性,并使用Excel-DNA中的COM接口检索该对象加入。