Я создаю пользовательскую среду .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);
}
}
Первое запущенное приложение выдает:
Нажмите ввод, чтобы захватить ресурс!
1: 24.06.2009 8:27:34
3: 24.06.2009 8:27:34
Нажмите ввод, чтобы закрыть процесс!
Второе приложение выдает:
Нажмите ввод, чтобы захватить ресурс!
9: 24.06.2009 8:27:35
10: 24.06.2009 8:27:35
Нажмите ввод, чтобы закрыть процесс!
Заключение
Мне бы хотелось, чтобы оба приложения возвращали одну и ту же строку времени первого создания класса.
Как видите, синглтон работает для нескольких потоков внутри процесса, но не для перекрестных процессов. Может быть, этого нельзя сделать, потому что я не могу найти никакого решения.