c#项目之间的单例模式不起作用
本文关键字:单例模式 不起作用 之间 项目 | 更新日期: 2023-09-27 18:13:03
我有3个项目在这样的解决方案:
- Xna游戏项目(Game)参考库
- 图书馆项目(Library)
- Windows窗体项目(WIN)参考库
这个项目有一个多项目启动(WIN和GAME)。
因此,在我的库中,我有一个facade来注入它们之间的依赖关系,使用单例来提供一种统一的方式来使用插入串行连接器的设备。
这就是为什么我使用单例…因为我不能有两个连接到同一个端口。
在我的其他2个库(WIN和GAME)中,我通过这个facade使用导航器。但是结果总是2次尝试实例化串行端口,所以第二次总是失败!…
调试它,在该行添加一个断点:
private static readonly LogicalFaccade _instance = new LogicalFaccade();
我要了两个不同的电话…我从每个项目(WIN和GAME)中获得一个。
如何在项目之间共享唯一实例?
我的代码有问题吗?
public class LogicalFaccade
{
private static readonly object thredLock = new Object();
private static readonly LogicalFaccade _instance = new LogicalFaccade();
public static LogicalFaccade Instance
{
get
{
return _instance;
}
}
private INavigator _navigator;
public INavigator Navigator
{
get
{
lock (thredLock)
{
if (_navigator == null)
{
_navigator = new SerialNavigator("COM4", 19200, 8);
}
return _navigator;
}
}
}
}
通过你的实现,你将有一个单例对象抛出多个线程的一个进程(或EXE)。
当有3个启动项目时,你将有3个不同的过程,所以使用单例模式(以你实现的方式)将不会帮助你。
如果您的3个项目(进程)将在single workstation (PC)
上运行,您可以通过使用Semaphore的锁定机制共享资源,这里可以找到一个有用的示例。如果它们将在multiple PCs
上分发,则需要使用进程间通信。
.Net中的一些主要选项有:
WCF
Remoting
ASP。Net webservices
WM_COPYDATA
套接字编程
可以通过IPC实现。这里是链接命名管道的例子http://www.codeproject.com/Articles/7176/Inter-Process-Communication-in-NET-Using-Named-Pip。希望对大家有所帮助