簡體   English   中英

在多個項目之間共享實例

[英]Share an instance between multiple projects

我正在VS 2008 C#中工作,需要與另一個項目共享在一個項目中創建的對象的實例。 我嘗試在project1中創建一個靜態類並將其添加為對project2的鏈接,但未保存信息。 靜態類是在project1中編寫的。

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

當我嘗試上述操作時,project2.object將為null。 通過添加一個類作為鏈接,它是在project2中創建靜態類的新實例還是引用相同的類? 如果它引用相同的類,那么project2是否不可以訪問從project1保存到靜態類中的任何信息? 我知道這不是共享數據的最優雅的方式,但是如果有人可以幫助解決此問題或提供更好的方式進行共享,我將不勝感激。

提前致謝。

項目在單獨的流程中運行,因此它們不能以這種方式共享數據。 您需要將數據保留在另一種類型的存儲中。 我建議使用數據庫(嘿,有20個gazillion網站,股票交易應用,航空公司等都沒錯)。

如果您不想使用數據庫,則可以在應用程序實例之間打開IP連接,並讓線程發送數據包以在應用程序之間來回同步。 或者,在您的“服務器”應用程序中,添加一個Web服務,每個進程都將調用該服務來更新和檢索信息。

如果您需要進程之間的真正高速通信,那么具有對等拓撲或星形拓撲的套接字是一個不錯的選擇。 如果您對某些延遲感到滿意,那么擁有Web服務(即使這些不是Web應用程序也能正常工作)或數據庫可能是一個不錯的解決方案。 正確的方法取決於您的應用程序。

WCF也可以解決此問題。 它有效地包裝了IP /套接字層,並提供了一些不錯的對象持久性/遠程控制功能,但是我發現對於大多數應用程序來說,它過於復雜。

要在不同進程之間共享一個對象的單個實例(這就是我想做的事情),您需要一些東西來維持該對象的狀態。 您可以查看WCF以及如何設置其行為以使其成為單例,以便基本上每個請求者都能獲得相同的實例。

http://msdn.microsoft.com/zh-CN/magazine/cc163590.aspx

創建鏈接只會創建適用於源代碼的鏈接。 當您編譯每個項目時,然后在兩個項目中都可以使用單個類定義。 在共享期間,您執行的過程不會對實例產生任何影響。

您可以查看WCF.NET Remoting ,盡管.NET Remoting現在已正式由WCF取代。

如果您正在談論在兩個進程之間共享同一對象,則可以做到這一點,這個概念稱為內存映射文件。 這是msdn的一些入門文檔。

盡管文檔和API經常使用“ FileMapping”一詞,但您可以將其僅用於在兩個進程之間共享內存。

在.NET 4.0中,可以使用System.IO.MemoryMappedFiles命名空間。 對於您的情況,看起來像.NET 3.5,您必須使用某種互操作才能使用Win API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM