2

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

  1. 参考图书馆的 Xna 游戏项目 (GAME)
  2. 图书馆项目(图书馆)
  3. 参考库的 Windows 窗体项目 (WIN)

该项目有多个项目启动(WIN 和 GAME)。

因此,在我的库中,我有一个外观,可以使用单例注入它们之间的依赖关系,以提供一种统一的方式来使用插入串行连接器的设备。

这就是我使用单例的原因......因为我不能有 2 个连接到同一个端口。

在我的其他 2 个库(WIN 和 GAME)中,我通过这个外观使用导航器。但结果总是 2 次尝试实例化串行端口,所以第二次总是失败!..

调试它,在该行中添加一个断点:

private static readonly LogicalFaccade _instance = new LogicalFaccade();

我请求了 2 个不同的调用...我从每个项目(获胜和游戏)中获取一个。

如何在项目之间共享唯一实例?

我的代码有问题吗?...

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;
            }
        }
    }
}
4

2 回答 2

2

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

如果您的 3 个项目(进程)将在 a 上运行,您可以使用Semaphore锁定机制single workstation (PC)共享资源,可以在此处找到有用的示例。 如果它们将分布在你需要使用进程间通信
multiple PCs

.Net 中的一些主要选项是:
WCF
Remoting
ASP.Net WebServices
WM_COPYDATA
套接字编程

于 2013-05-11T19:49:09.440 回答
1

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

于 2013-05-11T16:49:09.610 回答