Я создаю настраиваемую аппаратную инфраструктуру .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 работает для нескольких потоков внутри процесса, но не для перекрестных процессов. Возможно, этого не может быть сделано, поскольку я не могу найти какое-либо решение.
