我在像这样的解决方案中有3个项目:
这个项目有一个多项目启动(WIN和GAME)。
因此,在我的库中,我有一个外观,使用单例注入它们之间的依赖关系,以提供使用插入串行连接器的设备的统一方法。
这就是我使用单身人士的原因...因为我无法连接到同一个端口。
在我的其他2个库(WIN和GAME)中,我使用导航器穿过这个外观。但结果总是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;
}
}
}
}
答案 0 :(得分:2)
通过实现,您将有一个单例对象抛出单个进程(或EXE)的许多线程。
当有3个启动项目时,您将有3个不同的过程,因此使用单例模式(以您实施的方式)将无法帮助您。
如果您的3个项目(流程)将在single workstation (PC)
上运行,您可以使用Semaphore的锁定机制共享资源,可以找到一个有用的示例{{ 3}}。
如果它们将在multiple PCs
分发,则您需要使用 here。
答案 1 :(得分:1)
您可以使用IPC实现它。以下是命名管道示例http://www.codeproject.com/Articles/7176/Inter-Process-Communication-in-NET-Using-Named-Pip的链接。希望它有所帮助