Estoy creando un framework de hardware .net personalizado que será utilizado por otros programadores para controlar algunos hardware. Agregarán una referencia a nuestra DLL para acceder a nuestro marco de hardware. Necesito una clase compartida a la que se accederá desde múltiples aplicaciones (procesos).¿Se puede compartir una clase Singleton dentro de una DLL en todos los procesos?
El patrón singleton parece ser lo que necesito pero solo funciona para varios subprocesos dentro de su proceso. Podría estar completamente equivocado, pero aquí hay un ejemplo del código C# que tengo actualmente. No puedo evitar sentir que el diseño es incorrecto. Desearía poder compartir información más específica, pero no puedo.
- Debo recalcar que no tendré control sobre la aplicación del cliente. La solución debe estar contenida dentro del marco (DLL).
El Marco de: (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;
}
}
}
la aplicación de prueba: (eventual aplicación cliente)
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 primera aplicación iniciada da una salida de:
¡Presione enter para capturar el recurso!
1: 6/24/2009 8:27:34 AM
3: 6/24/2009 8:27:34 AM
presione ENTRAR para cerrar el proceso!
La segunda aplicación da una potencia de:
Pulse Intro para capturar el recurso!
9: 6/24/2009 8:27:35 AM
10: 6/24/2009 8:27:35 AM
presione ENTRAR para cerrar el proceso!
Conclusión:
me gustaría ver las dos solicitudes de restitución de la misma cadena del tiempo de la primera instancia de la clase.
Como puede ver, el singleton funciona para el hilo múltiple dentro del proceso, pero no para los procesos cruzados. Tal vez esto no se puede hacer porque no puedo encontrar ninguna solución.
Debo subrayar que lo haré no tiene control sobre la aplicación del cliente. La solución debe estar contenida dentro del marco (DLL). –