我正在创建一个自定义的.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:2009 年 6 月 24 日上午 8 点 27 分 34 秒
3:2009 年 6 月 24 日上午 8 点 27 分 34 秒
按回车关闭进程!
第二个应用程序提供以下输出:
按回车键获取资源!
9:2009 年 6 月 24 日上午 8 点 27 分 35 秒
10:2009 年 6 月 24 日上午 8 点 27 分 35 秒
按回车关闭进程!
结论:
我希望看到两个应用程序都返回相同的类的第一次实例化时间的字符串。
如您所见,单例适用于进程内的多个线程,但不适用于跨进程。也许这无法完成,因为我似乎找不到任何解决方案。