Я создаю пользовательскую аппаратную платформу .net, которая будет использоваться другими программистами для управления некоторым оборудованием. Они добавят ссылку на нашу DLL, чтобы добраться до нашей аппаратной платформы. Мне нужен общий класс, доступ к которому будет осуществляться из нескольких приложений (процессов).
Одноэлементный шаблон кажется мне нужным, но он работает только для нескольких потоков внутри вашего процесса. Я могу ошибаться, но вот пример кода C#, который у меня сейчас есть. Я не могу отделаться от ощущения, что дизайн неправильный. Я хотел бы поделиться более конкретной информацией, но я не могу.
- Я должен подчеркнуть, что я не буду контролировать клиентское приложение. Решение должно содержаться внутри самой структуры (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, чтобы закрыть процесс!
Вывод:
Я хотел бы, чтобы оба приложения возвращали одну и ту же строку времени первого экземпляра класса.
Как видите, синглтон работает для нескольких потоков внутри процесса, но не для кросс-процессов. Может быть, это невозможно сделать, потому что я не могу найти никакого решения.