使用excel插件防止单例对象的多个实例
我有两件插入到excel中的技术。
一个是实现IDTExtensibility2接口的COM Addin。 另一个是通过Excel-DNA实现的RTD服务器。
这两个对象都是由excel实例化的。 他们每个人都需要在运行时访问第三个对象来获取数据并将其推送到excel。
由于我不能把这个对象交给excel插件,所以我把它做成了一个单例,希望每个人都可以共享相同的实例。
不幸的是,在运行代码时,每个人都看不到另一个创build的单例对象的实例。
我怎样才能得到这两个插件引用同一个对象?
假设两个插件都需要保留,我宁愿不进行进程间通信设置。
TL / DR两个excel插件需要共享第三个对象,但是使第三个对象成为单例不起作用,因为每个excel插件都看不到其他插件创build的第三个对象的实例。
这个问题的解决scheme是什么?
您加载项正在单独的AppDomain中加载。 一种select是将COM加载项集成到Excel-DNA加载项中。 这可能和以下一样简单:
- 将您的COM加载项代码添加到您的Excel-DNA项目中,
- 更改您的加载项类从
ExcelComAddIn
派生(而不是IDTExtensibility2
), - 通过
ExcelComAddInHelper.LoadComAddIn(...)
在AutoOpen
加载该类。
否则,你将需要某种AppDomain之间的通信。 您可以设置一个通过参考引用的对象,将其设置为对应于您加载的加载项的COMAddIn
对象的Object
属性,并使用Excel-DNA加载项中的COM接口检索该对象。