Потребовалось мне создать службу Windows и десктопное приложение. Обе этих программы, в идеале, должны работать с одной и той же коллекцией пользовательского типа данных, чтобы одновременно и быстро реагировать на любые изменения в этой коллекции. Возможен, конечно, вариант с использованием каког-либо конфигурационного файла, об изменениях в котором десктопное приложение сообщит службе с помощью команды, но этот вариант не очень удобен. На данный момент оба приложения используют одну и ту же библиотеку (dll), в которой используемая коллекция и находится, но каждая из прог использует свой экземпляр и поэтому служба не видит, какие изменения были внесены в коллецию десктопным приложением и наоборот. Отсюда вопрос: можно ли создать "Статическую" библиотеку на c# либо решить проблему передачи данных другим способом?
UPD:
Решение проблемы нашел. Использовал NamedPipes. Подробно об этом способе написал вот тут. Спасибо огромное за помощь!
Библиотека не хранит вашу коллекцию, она хранится в памяти, по этому никакая "статичная" библиотека не поможет вам решить вашу проблему. По сути вы хотите выделить память для доступа из обоих приложений. В .Net приложениях сделать это невозможно, по тому что каждый апп запускается в своем домене.
По этому для решения проблемы вам нужен некий посредник, к которому ваши приложения будут обращаться за пользовательскими данными. Способы решения зависят от объемов данных, способа их изменения и тп.
Если речь идет о обмене небольшого объема данных, то можно применить такую технику как Memory Mapped Files, изменения можно определять по блокировке\разблокировке доступа.
Если объем данных значительный, то лучше будет воспользоваться базой данных и реализовать подписку на изменения.
Так же можно воспользоваться шиной данных, например msmq.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости