Kann eine Singleton-Klasse in eine DLL freigegeben werden Prozesse?

Ich bin erstellen einer benutzerdefinierten .net hardware-Frameworks, die verwendet werden von anderen Programmierern, um die Kontrolle über einige hardware. Sie fügen Sie einen Verweis auf unsere DLL zu bekommen, um unsere hardware-framework. Ich bin in der Notwendigkeit einer gemeinsamen Klasse, die Zugriff wird von mehreren Anwendungen (Prozesse).

Das singleton-Muster zu sein scheint, was ich brauche, aber es funktioniert nur für mehrere threads in einem Prozess. Ich konnte völlig falsch, aber hier ist ein Beispiel der C# - code, den ich derzeit habe. Ich kann mir nicht helfen zu spüren, dass der Entwurf falsch ist. Ich wünschte, ich könnte mehr konkrete Informationen, aber ich kann nicht.

  • Ich muss betonen, dass ich keinerlei Kontrolle über die Kunden-Anwendung. Die Lösung muss sein, die innerhalb der Rahmen (DLL) selbst.

Rahmen: (Shared 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;
        }
    }
} 

Die Test-Anwendung: (eventuell Kunden-app)

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);
    }
}

Die erste gestartete Anwendung gibt eine Leistung von:

Drücken Sie die EINGABETASTE, um zu erfassen die Ressource!

1: 6/24/2009 8:27:34 UHR

3: 6/24/2009 8:27:34 UHR

Drücken Sie die EINGABETASTE, um den Prozess zu beenden!

Die zweite Anwendung ergibt eine Leistung von:

Drücken Sie die EINGABETASTE, um zu erfassen die Ressource!

9: 6/24/2009 8:27:35 UHR

10: 6/24/2009 8:27:35 UHR

Drücken Sie die EINGABETASTE, um den Prozess zu beenden!

Abschluss:

Ich würde gerne sehen, beide Anwendungen dieselbe Zeichenfolge zurück an die Zeit der ersten Instanziierung der Klasse.

Wie Sie sehen können die singleton arbeitet für die mehrere Threads innerhalb des Prozesses, aber nicht cross-Prozesse. Vielleicht kann dies nicht getan werden, denn ich kann nicht scheinen zu finden, keine Lösung.

Ich muss betonen, dass ich keinerlei Kontrolle über die Kunden-Anwendung. Die Lösung muss sein, die innerhalb der Rahmen (DLL) selbst.

InformationsquelleAutor Bobby Cannon | 2009-06-24

Schreibe einen Kommentar