Я создаю настраиваемую аппаратную инфраструктуру .net, которая будет использоваться другими программистами для управления некоторым оборудованием. Они добавят ссылку на нашу DLL, чтобы перейти к нашей аппаратной платформе. Мне нужен общий класс, к которому можно получить доступ из нескольких приложений (процессов).
Синтаксический шаблон, похоже, мне нужен, но он работает только для нескольких потоков внутри вашего процесса. Я мог быть совершенно неправ, но вот пример кода С#, который у меня есть. Я не могу не чувствовать, что дизайн неправильный. Хотел бы я поделиться более конкретной информацией, но я не могу.
- Я должен подчеркнуть, что я не буду контролировать приложение клиента. Решение должно содержаться внутри самой структуры (DLL).
Рамка: (общая библиотека DLL)
public class Resources
{
static readonly Resources m_instance = new Resources();
public string Data;
private Resources()
{
Data = DateTime.Now.ToString();
}
public static Resources Instance
{
get
{
return m_instance;
}
}
}
Приложение для тестирования: (в конечном итоге клиентское приложение)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press enter to capture the resource!");
Console.ReadLine();
var resources = Resources.Instance;
Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += WorkerDoWork;
worker.RunWorkerAsync();
while (worker.IsBusy)
{
Thread.Sleep(100);
}
Console.WriteLine("Press enter to close the process!");
Console.ReadLine();
}
static void WorkerDoWork(object sender, DoWorkEventArgs e)
{
var resources = Resources.Instance;
Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data);
}
}
Первое запущенное приложение дает результат:
Нажмите Enter, чтобы захватить ресурс!
1: 6/24/2009 8:27:34 AM
3: 6/24/2009 8:27:34 AM
Нажмите "Enter", чтобы закрыть процесс!
Второе приложение дает вывод:
Нажмите Enter, чтобы захватить ресурс!
9: 6/24/2009 8:27:35 AM
10: 6/24/2009 8:27:35 AM
Нажмите "Enter", чтобы закрыть процесс!
Заключение
Я хотел бы, чтобы оба приложения возвращали одну и ту же строку времени первого экземпляра класса.
Как вы видите, singleton работает для нескольких потоков внутри процесса, но не для перекрестных процессов. Возможно, этого не может быть сделано, поскольку я не могу найти какое-либо решение.