【问题标题】:Share an instance between multiple projects在多个项目之间共享一个实例
【发布时间】:2011-02-03 02:52:01
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 我相信你把类和对象的概念搞混了。我可以建议学习一本基本的面向对象编程书籍吗?

标签: c# visual-studio


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      创建链接只适用于源代码。当您编译每个项目时,它就会在两个项目中使用该单一类定义。您在运行时共享的过程中对实例没有任何作用。

      您可以查看 WCF.NET Remoting,尽管 .NET Remoting 现在已被 WCF 正式取代。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-02-02
          • 2012-09-27
          • 2020-12-05
          • 2017-05-15
          • 2018-03-18
          • 2012-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多