Sto creando un framework hardware .net personalizzato che verrà utilizzato da altri programmatori per controllare alcuni componenti hardware. Aggiungeranno un riferimento alla nostra DLL per arrivare al nostro framework hardware. Ho bisogno di una classe condivisa a cui accedere da più applicazioni (processi).È possibile condividere una classe Singleton in una DLL tra i processi?
Il modello singleton sembra essere quello di cui ho bisogno ma funziona solo per più thread all'interno del processo. Potrei sbagliare completamente ma qui c'è un esempio del codice C# che ho attualmente. Non posso fare a meno di pensare che il design sia scorretto. Vorrei poter condividere informazioni più specifiche ma non posso.
- Devo sottolineare che non avrò alcun controllo sull'applicazione del cliente. La soluzione deve essere contenuta all'interno della struttura (DLL) stessa.
Il quadro: (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;
}
}
}
l'applicazione di test: (eventualmente cliente 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);
}
}
La prima applicazione lanciata dà una potenza di:
Premi enter per acquisire la risorsa!
1: 2009/06/24 08:27:34
3: 2009/06/24 08:27:34
premere INVIO per chiudere il processo!
La seconda applicazione dà una potenza di:
Premere Invio per catturare la risorsa!
9: 2009/06/24 08:27:35
10: 2009/06/24 08:27:35
premere INVIO per chiudere il processo!
Conclusione:
vorrei vedere entrambe le applicazioni restituiscono la stessa stringa del tempo della prima istanza della classe.
Come si può vedere il singleton funziona per il thread multiplo all'interno del processo ma non i processi incrociati. Forse questo non può essere fatto perché non riesco a trovare alcuna soluzione.
devo sottolineare che lo farò non ha alcun controllo sull'applicazione del cliente. La soluzione deve essere contenuta all'interno della struttura (DLL) stessa. –