Подтвердить что ты не робот

Как получить доступ к свойству приложения в надстройке VSTO Outlook за пределами класса ThisAddIn?

Класс ThisAddIn, созданный с помощью нового проекта Outlook VSTO С#, имеет свойство Application, которое вы можете использовать, помимо прочего, для доступа к папкам и элементам Outlook. Проблема в том, что вы можете легко использовать его, когда находитесь внутри класса ThisAddIn, но нет простого доступа к нему из других классов проекта. Это связано с тем, что это свойство экземпляра.

Я хочу найти лучший способ получить доступ к той же функциональности, которую это свойство предоставляет в моих других классах, поэтому я придумываю два возможных решения, но не знаю, какой из них (если они есть) хороши.

Предположим, что я хочу получить папку входящих сообщений по умолчанию. Внутри класса 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. Создать новый объект приложения

Вторая вещь, которую я могу сделать, - это запустить объект приложения в моем другом классе, прежде чем использовать его. Но я не уверен, что создание нового объекта этого типа не создает новый экземпляр Outlook.

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

Есть ли у кого-нибудь предложения, которые подходят лучше, если у вас есть разные решения для этой проблемы, я бы тоже это использовал.

4b9b3361

Ответ 1

Поскольку у вас может быть один экземпляр ThisAddIn, вы можете иметь статическую переменную для доступа к форме приложения за пределами... FYI при добавлении проекта Outlook-AddIn VSTO, экземпляр ThisAddIn будет доступен как статический член в статическом классе Globals