在c#.net中跨应用程序的单例对象

时间:2014-11-13 12:58:43

标签: c# .net design-patterns singleton

我知道什么是单例模式以及如何创建它以及如何使用锁定和双重检查使其线程安全但是 所有我想知道"让我们考虑一个场景,我有一个.dll,它有一个单独的类。现在有两个应用程序正在使用.dll并访问单例类对象。"  因此,单例模式提供单个对象应用程序,或者它可以跨应用程序工作。如果它不跨应用程序工作,那么如何在不使用任何WCF或Web服务的情况下创建应用程序范围的单例对象。基本上我希望跨应用程序访问的类对象应该是相同的,使用MarshalByRef或其他东西。

1 个答案:

答案 0 :(得分:0)

单独使用语言功能,您不能创建跨应用程序域的单例对象实例,更不用说进程了。所以,不......你要求做的事情根本不可能

您似乎也明确排除了各种远程处理API,因此您必须在较低的抽象级别实现此功能。即明确管理的进程间通信,例如命名管道或套接字。

即使有这个要求,我也会尽力避免。但假设您有一些真正需要被视为单身的单一机器范围资源,恕我直言,接近它的最佳方式是创建一个始终运行的服务,并提供任何应该由共享的资源。所有正在运行的程序实例。

最后请注意,您可以轻松确保程序的一个实例(对于给定的用户登录会话或整个机器,具体取决于实现)。通常的方法是使用命名的互斥锁,程序将在初始化时创建/检查,如果程序的某个其他实例已经创建它,则新实例将退出。有关详细信息,请参阅How to restrict a program to a single instance