如何访问ThisAddIn类之外的VSTO Outlook加载项中的应用程序属性?

RaY*_*ell 17 .net c# vsto outlook-addin

使用新的Outlook VSTO C#项目创建的ThisAddIn类具有一个Application属性,您可以使用该属性访问Outlook文件夹和项目.问题是当你在ThisAddIn类中时可以轻松使用它,但是从项目中的其他类中无法轻松访问它.这是因为它是一个实例属性.

我想找到这个属性在我的其他类中提供相同功能的最佳方式,所以我想出了两个可能的解决方案,但我不知道它们中的哪一个(如果有的话)是好的.

让我们假设我想获取默认的收件箱文件夹.在ThisAddIn类里面我会做这样的事情:

this.Application.Session.GetDefaultFolder(Outlook.olFolderInbox);
Run Code Online (Sandbox Code Playgroud)

现在如何在这堂课外做同样的事情?

1.静态属性

首先,我可以向ThisAddIn类添加一个静态属性,并将其设置为我想在其他类中公开的值.

public partial class ThisAddIn
{
    public Outlook.Application OutlookApp;

    void ThisAddIn_Startup(object sender, EventArgs e)
    {
        // init static variable value here
        OutlookApp = this.Application

        // initialize the rest of addin here
    }

    void InternalStartup()
    {
        this.Startup += this.ThisAddIn_Startup;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样在我的任何其他类中我都可以这样做:

ThisAddIn.OutlookApp.Session.GetDefaultFolder(Outlook.olFolderInbox);
Run Code Online (Sandbox Code Playgroud)

2.创建新的Application对象

我可以做的第二件事是在我使用它之前在我的其他类中初始化Application对象.但我不确定创建该类型的新对象是否不会创建Outlook的新实例.

class MyOtherClass
{
    public void MyMethod()
    {
        var app = new Outlook.Application();
        var folder = app.Session.GetDefaultFolder(Outlook.olFolderInbox);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何建议哪种方法更好,如果你对这个问题有不同的解决方案,我也会对此表示赞同.

Dee*_*k N 18

由于你可以有单个Instance of ThisAddIn,你可以有一个静态变量来访问外部的应用程序表格...当你添加Outlook-AddIn VSTO项目时,这个AddAdIn的实例将作为静态类Globals中的静态成员使用

  • 显然我可以跳过定义静态属性,因为我可以使用`Globals.ThisAddIn.Application`.谢谢你的帮助. (6认同)