如何访问ThisAddIn类之外的VSTO Outlook加载项中的Application属性?

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

我想找到访问此属性在我的其他类中提供的相同function的最佳方式,因此我提出了两种可能的解决方案,但我不知道哪一种(如果有的话)是好的。

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

 this.Application.Session.GetDefaultFolder(Outlook.olFolderInbox); 

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

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; } } 

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

 ThisAddIn.OutlookApp.Session.GetDefaultFolder(Outlook.olFolderInbox); 

2.创建新的Application对象

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

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

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

由于您可以拥有单个Instance of ThisAddIn,因此您可以使用静态变量来访问外部的应用程序表单…当您添加Outlook-AddIn VSTO项目时,FYI将在静态类Globals中以静态成员的forms提供ThisAddIn的实例