2011-02-02 19 views
1

私はVS 2008 C#で作業しており、あるプロジェクトで作成されたオブジェクトのインスタンスを別のプロジェクトと共有する必要があります。私はproject1で静的クラスを作成し、project2へのリンクとして追加しようとしましたが、情報は保存されませんでした。静的クラスはproject1で記述されています。複数のプロジェクト間でインスタンスを共有する

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

私が上記のようなものを試したとき、project2.objectはnullになります。クラスをリンクとして追加すると、それはproject2で静的クラスの新しいインスタンスを作成しているのでしょうか、それとも同じクラスを参照していますか?同じクラスを参照している場合、project1の静的クラスに保存された情報はproject2からアクセスできないはずですか?私はこれがデータを共有する最もエレガントな方法ではないことを知っていますが、誰かがこの問題を助けたり、より良いやり方を提供してくれれば、私はとても感謝しています。

ありがとうございます。

+5

私はクラスとオブジェクトのコンセプトが混ざっていると思います。基本的なオブジェクト指向のプログラミングブックを勉強することを提案できますか? – tomfanning

答えて

0

異なるプロセス間でオブジェクトの1つのインスタンスを共有する(それはあなたがやろうとしていると思います)、そのオブジェクトの状態を維持するものが必要です。基本的にすべてのリクエスタが同じインスタンスを全面的に取得できるように、WCFとその動作をシングルトンとして動作するように設定する方法があります。リンクを作成

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

0

しか作成したソースコードに適用されます。各プロジェクトをコンパイルすると、両方のプロジェクトで使用できる単一のクラス定義が作成されます。実行したプロセスは、実行時にインスタンスを共有するために何もしません。

.NET Remotingが正式にWCFに置き換えられましたが、WCFまたは.NET Remotingを参照できます。

1

プロジェクトは別々のプロセスで実行されるため、この方法でデータを共有することはできません。データを別のタイプのストアに保存する必要があります。私はデータベースを使用することをお勧めします(ちょっと、20 gazillionのウェブサイト、株取引のアプリ、航空会社などは間違ってはいけません)。

データベースを使用したくない場合は、アプリケーションのインスタンス間でIP接続を開き、スレッド間でデータパケットを送信してアプリケーション間で同期させることができます。または、「サーバー」アプリケーションで、各プロセスが情報の更新と取得を呼び出すWebサービスを追加します。

プロセス間で本当に高速な通信が必要な場合は、ピアトポロジまたはスタートポロジを持つソケットが適しています。あなたが何らかの待ち時間で大丈夫なら、ウェブサービス(ウェブアプリケーションでなくてもうまくいく)やデータベースを持つことは良い解決策になるかもしれません。適切なアプローチはアプリケーションによって異なります。

WCFもこの問題を解決できます。これは効果的にIP /ソケット層を包み込み、優れたオブジェクト永続性/リモートコントロール機能を提供しますが、ほとんどのアプリケーションではそれほど複雑ではありません。

0

2つのプロセス間で同じオブジェクトを共有することについて話しているなら、それを実行できます。その概念はメモリマップファイルと呼ばれます。 Here is some starter docs from msdn.

「ファイルマッピング」という用語をかなり使いますが、2つのプロセス間でメモリを共有するために使用できます。

.NET 4.0では、System.IO.MemoryMappedFiles名前空間を使用できます。あなたのケースでは、.NET 3.5のように見えますが、Win APIを使用するためには何らかのinteropを使用する必要があります。

関連する問題