2013-03-08 74 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