单身参考

时间:2010-01-18 20:31:42

标签: c# singleton pass-by-reference

好的......我的情况是C#.dll是单身人士。现在,我想要做的是在实例化singletonInstance时能够提供对可能启动的任何其他应用程序的引用。所以,我查找了NamedPipes,这样可行 - 除了一件事,这必须是跨平台的,或平台无关的。我有一个解决方案,但我很难弄清楚是否可以通过句柄或其他方法获得对singletonInstance的引用?

现在已经有了一些评论和问题,我可以解释一下并澄清一下:我所拥有的基本上是一个共同的共享资源(我的singletonInstance.dll)。假设appA需要singletonInstance,如果它尚未实例化,它将实例化它。然后启动appB,它需要对singletonInstance的引用。这就是场景。

4 个答案:

答案 0 :(得分:2)

如果我正确读取此内容,您应该在服务器上管理实例,让其他应用程序与服务器而不是对象本身进行通信。 Web服务是我想到的第一件事,但我对您的问题知之甚少。

答案 1 :(得分:0)

好吧,你可以通过命名管道进行交流,当它们不可用时你可以去套接字,但这取决于你的“单身人士”究竟会做什么。它是某种共享缓存吗?或者是什么?

将应用程序和“singleton”分开运行在同一台计算机上还是网络中?无论如何socket的方法是好的,如果你想控制低级别的实现,或者你可以通过一些开销或使用远程处理转到webservices。

答案 2 :(得分:0)

我会提供一个答案 - Runtime.Remoting.Channels。我有一个公共数据对象('singletonInstance')继承MarshaByRefObject。这给了我们我们想要的东西,而且我们正在使它具备一些网络功能。现在,这真的像一项服务。 TcpChannel“服务器”实际上是公共数据对象所在的.dll的一部分。这主要用于测试,实验实施等。

答案 3 :(得分:0)

听起来你最好不要实现需要作为服务共享的任何东西。

您可以通过选择公开/实施/允许的各种方式连接到服务。 Web服务,WCF,命名管道或原始套接字等。选择最适合您的方式。

服务本身可以适当地管理它的内部状态(单例反模式或其他方面,它是无关紧要的)。

考虑如何构建Sql Server。它不是跨进程和内存边界共享相同的dll实例,也不是使用重客户端。