首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ThisAddIn类之外访问VSTO Outlook外接程序中的应用程序属性?

如何在ThisAddIn类之外访问VSTO Outlook外接程序中的应用程序属性?
EN

Stack Overflow用户
提问于 2010-02-01 17:53:38
回答 2查看 12.7K关注 0票数 17

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

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

假设我想要获取默认的收件箱文件夹。在ThisAddIn类中,我会简单地做如下操作:

代码语言:javascript
复制
this.Application.Session.GetDefaultFolder(Outlook.olFolderInbox);

现在如何在这个类之外做同样的事情呢?

1.静态属性

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

代码语言:javascript
复制
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;
    }
}

通过这种方式,在我的任何其他类中,我都可以这样做:

代码语言:javascript
复制
ThisAddIn.OutlookApp.Session.GetDefaultFolder(Outlook.olFolderInbox);

2.创建新的Application对象

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

代码语言:javascript
复制
class MyOtherClass
{
    public void MyMethod()
    {
        var app = new Outlook.Application();
        var folder = app.Session.GetDefaultFolder(Outlook.olFolderInbox);
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-13 16:09:16

由于您可以拥有单个ThisAddIn实例,因此您可以使用一个静态变量来访问外部的应用程序表单...仅供参考当您添加Outlook-AddIn VSTO项目时,ThisAddIn实例将作为静态类全局变量中的静态成员可用

票数 19
EN

Stack Overflow用户

发布于 2019-10-22 20:37:34

实际上,在ThisAddIn中放置静态变量以便从代码周围引用是一种糟糕的做法。

根据这个答案https://stackoverflow.com/a/46493968/2068626,Outlook Application对象是一个单例对象,因此最好由您自己提出第二个建议

代码语言:javascript
复制
var app = new Outlook.Application();

由于这是Outlook VSTO加载项,因此启动Outlook的风险为零,因为根据定义,它将处于运行状态。如果在其他Office应用程序中使用此方法,则仅当Outlook当前未运行时才会启动Outlook。

出于完整性的考虑,所有其他共享模型都应该使用依赖注入的形式,这样代码中就不会有强耦合。

使用这两种方法,您还可以更容易(可能)将代码和其他类重构到单独的库中,以便在VSTO项目甚至Nuget包中更容易重用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2175803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档