项目之间的C#单例不起作用

时间:2013-05-11 16:19:38

标签: c# singleton multiple-projects

我在像这样的解决方案中有3个项目:

  1. 参考图书馆的Xna游戏项目(游戏)
  2. 图书馆计划(图书馆)
  3. Windows表单项目(WIN),参考库
  4. 这个项目有一个多项目启动(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;
                }
            }
        }
    }
    

2 个答案:

答案 0 :(得分:2)

通过实现,您将有一个单例对象抛出单个进程(或EXE)的许多线程。
当有3个启动项目时,您将有3个不同的过程,因此使用单例模式(以您实施的方式)将无法帮助您。

如果您的3个项目(流程)将在single workstation (PC)上运行,您可以使用Semaphore锁定机制共享资源,可以找到一个有用的示例{{ 3}}。
如果它们将在multiple PCs分发,则您需要使用 here

<。> .Net中的一些主要选项是:
inter process communications
WCF
Remoting
ASP.Net WebSevices
WM_COPYDATA

答案 1 :(得分:1)

您可以使用IPC实现它。以下是命名管道示例http://www.codeproject.com/Articles/7176/Inter-Process-Communication-in-NET-Using-Named-Pip的链接。希望它有所帮助