共享办公室Addin中的静态类或变量的范围

时间:2017-01-24 14:18:57

标签: c# outlook vsto outlook-addin word-addins

我们在共享插件(Word,Outlook)中有一个静态地图,用于在应用程序运行时存储一些缓存信息,如下所示:

public static class GlobalVariables
{
    //Key constants
    public static string USER_ACTION = "userAction";

    //private methods
    private static Dictionary<string, Object> globalMap = new Dictionary<string, object>();

    public static Dictionary<string, Object> GlobalMap
    {
        set { globalMap = value; }
        get { return globalMap; }
    }

    public static Object get(string key)
    {
        // custom Implementation
    }

    public static void Add(string key, Object obj)
    {
       //custom implementation
    }
}

我们有一个用例,我们使用Outlook发送邮件并对邮件发送执行如下操作:

private void adxOutlookAppEvents_ItemSend(object sender, ADXOlItemSendEventArgs e)
    {
        try
        {
            Outlook._MailItem mailItem = e.Item as Outlook._MailItem;
            string action = (string)GlobalVariables.get(GlobalVariables.USER_ACTION);
            if (false == string.IsNullOrEmpty(action))
            {
                this.performUserActionAfterMailSend(action);

        }
        catch (CustomeMessageException ex)
        {
            CommonUtils.iAlert(ex.Message);
        }
        catch (Exception ex)
        {
            CommonUtils.iError(RESOURCE.COMMON_ERROR_MSG);
        }
        finally
        {
            //CommonUtils.releaseComObject(oRecips);
        }

    }

但是在 adxOutlookAppEvents_ItemSend()中,当我尝试获取 GlobalMap 时,它会返回 null 。据我所知,静态变量可以跨线程访问。 是因为申请间的通信吗?为什么GlobalMap在尝试访问时返回null?

我将不胜感激任何帮助

1 个答案:

答案 0 :(得分:0)

COM插件是作为每个主机进程(outlook.exe,msword.exe等)加载的dll实现的。两个正在运行的进程之间不会共享任何类。您需要提供不同的存储机制(注册表文件系统?)来共享公共数据。