在多个项目之间共享实例

时间:2011-02-02 17:19:50

标签: c# visual-studio

我在VS 2008 C#中工作,需要与另一个项目共享在一个项目中创建的对象的实例。我尝试在project1中创建一个静态类,并将其添加为project2的链接,但信息未保存。静态类是在project1中编写的。

//object o = new object
//project1.staticObject = o
//project2.object = project1.staticObject

当我尝试上面的内容时,project2.object将为null。通过添加一个类作为链接,它是在project2中创建静态类的新实例还是引用同一个类?如果引用同一个类,那么project2是否可以访问从project1保存到静态类中的任何信息?我知道这不是最优雅的共享数据方式,但如果有人能帮助解决这个问题或提供更好的方式,我会非常感激。

提前致谢。

4 个答案:

答案 0 :(得分:1)

项目在不同的进程中运行,因此无法以这种方式共享数据。您需要将数据保存在另一种类型的商店中。我建议使用数据库(嘿,20万亿网站,股票交易应用程序,航空公司等不能错)。

如果您不想使用数据库,则可以在应用程序的实例之间打开IP连接,并让线程发送数据包以在应用程序之间来回同步。或者,在“服务器”应用程序中,添加每个进程将调用以更新和检索信息的Web服务。

如果您需要在进程之间进行真正的高速通信,那么具有对等或星型拓扑的套接字是一种很好的方法。如果您有一些延迟,那么拥有一个Web服务(即使这些不是Web应用程序也能正常工作)或数据库可能是一个很好的解决方案。正确的方法取决于您的申请。

WCF也可以解决这个问题。它有效地包装了IP /套接字层并提供了一些很好的对象持久性/远程控制功能,但我发现它对于大多数应用来说过于复杂。

答案 1 :(得分:0)

要在不同进程之间共享一个对象的实例(我认为你打算这样做),你需要能够维护该对象状态的东西。您可以查看WCF以及如何设置它的行为以充当单例,因此基本上每个请求者都可以获得相同的实例。

http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

答案 2 :(得分:0)

创建链接创建仅适用于源代码。编译每个项目时,它在两个项目中都可以使用该单个类定义。您在运行时进行共享时所执行的过程无效。

您可以查看WCF.NET Remoting,但.NET Remoting现已正式替换为WCF。

答案 3 :(得分:0)

如果您正在谈论在两个进程之间共享同一个对象,那么您可以这样做,这个概念称为内存映射文件。 Here is some starter docs from msdn.

尽管文档和API使用术语“FileMapping”,但您可以将其用于在两个进程之间共享内存。

在.NET 4.0中,您可以使用System.IO.MemoryMappedFiles命名空间。对于你的情况,看起来像.NET 3.5,你将不得不使用某种互操作来使用Win API。