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