У меня возникла проблема, и я только недавно определил следующее как причину (до сих пор было устранение симптомов). В основном, у меня есть решение, в котором есть проект приложения WPF (запуск), куча сборок (Model, ModelView и т. Д.) И надстройка Word VSTO. ViewModel и надстройка Word составляют одну из моделей, которые для этой стадии разработки я создал Singleton.C# Singleton, подвергшийся воздействию MS Word Interop Надстройка
модели представления конкретизирует модель в своем конструкторе, используя
ModelSingleton mod = ModelSingleton.Instance;
метод надстройка делает то же самое на ThisAddIn_Startup().
код модели:
private static volatile ModelSingleton instance;
private static object syncRoot = new Object();
private ModelSingleton()
{
}
public static ModelSingleton Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
{
instance = new ModelSingleton();
}
}
return instance;
}
}
Я хочу, чтобы Слово Addin захватить выделенный текст и передать его в моей модели, которая затем создает свое собственное событие, что ViewModel является подкровать к.
Моя проблема заключается в том, что и addin, и viewmodel создают отдельные экземпляры того, что должно быть Singleton. Выделенный текст передается одному элементу Singleton, но событие не генерируется, поскольку ViewModel подписывается на событие в другом экземпляре.
Я новичок в Interop и COM; Я ожидал бы, что синглтон будет создан только один раз. Существуют ли две отдельные среды выполнения или что-то происходит здесь (видимо, VSTO и WPF являются исполняемыми файлами, что означает, что они не могут напрямую обмениваться данными)? Как сделать Singleton истинным Singleton? И если это невозможно, как бы вы передали выделенный текст (и метаданные) из MS Word в свое проприетарное приложение?
Извините, если это было неясно, но представьте себе, «общественный класс ModelSingleton { }» завернутые вокруг кода выше – Moe45673