c#项目之间的单例模式不起作用

本文关键字:单例模式 不起作用 之间 项目 | 更新日期: 2023-09-27 18:13:03

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

  1. Xna游戏项目(Game)参考库
  2. 图书馆项目(Library)
  3. 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;
            }
        }
    }
}

c#项目之间的单例模式不起作用

通过你的实现,你将有一个单例对象抛出多个线程的一个进程(或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。希望对大家有所帮助