2013-03-08 83 views
2

我有两件插入到excel中的技术。使用excel插件防止多个单例对象的实例

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

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

既然不能用手这个对象添加到Excel插件,我做了它,希望他们每个人可以共享同一个实例是独生子。

不幸的是当运行代码时,他们每个人都没有看到对方已经创造了单对象的实例。

我怎样才能既加载项引用相同的对象?

让我们这两个加载项需要保留的假设下工作,我宁愿不去进程间通信的设置。

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

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

回答

1

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

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

否则,你将需要某种形式的跨AppDomain的沟通。您可以设置一个按元参考对象,该对象设置为对应于您加载的加载项的COMAddIn对象的Object属性,并使用Excel-DNA加载项中的COM接口检索该对象。

+0

你的'绝对正确。我不得不关于AppDomains。将所有代码合并到同一个外接程序中可以实现此功能。非常感激。 – chollida 2013-03-19 14:20:16