Как получить доступ к свойству приложения в надстройке Outlook VSTO вне класса ThisAddIn? - PullRequest
17 голосов
/ 01 февраля 2010

Класс ThisAddIn, созданный в новом проекте Outlook VSTO C #, имеет свойство 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. Создать новый объект приложения

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

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

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

1 Ответ

17 голосов
/ 13 февраля 2010

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

...