Класс 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);
}
}
Есть ли у кого-нибудь предложения, которые подходят лучше, если у вас есть разные решения для этой проблемы, я бы тоже это использовал.