2009-09-01 1 views
0

Composite WPFアプリケーションでは、複数のモジュールで必要なグローバル変数を格納する最良の方法は何ですか?たとえば、いくつかのモジュールがファイル名を取得する必要があるアプリケーションで作業しているので、ファイルから必要なデータを取得できます。複合WPF:グローバル変数?

このような情報をコンポジットWPFアプリケーションに格納するためのベストプラクティスはありますか?どのようにしてゆるいカップリングを維持しながら、私のモジュールに情報を取得するのですか?あなたの助けのおかげ

デビッドVeeneman
フォーサイトシステム

答えて

1

はあなたが必要とするモジュールにそのサービスをパッケージ化ロジックをカプセル化するサービスを書きます。その後、あなたの他のモジュールがそのサービスを使って自分の仕事を完了させるようにしてください。サービスは、ファイル名を直接公開してもよいし、消費者が前記ファイルを意識することなく、基礎となるファイルを操作する操作を公開することもできる。

1

「選択したファイル名」を返す責任を持つインタフェースを作成します。ほとんどのサービス/依存関係とは異なり、多くの処理は行われません。これは単に値を返す責任があります。依存関係注入を使用して、このサービスの実装者を必要とするすべての場所に提供します。

このファイル名は本当にグローバルに見えるかもしれませんが、あなたのアプリがSDIからMDIに移行しなければならないと想像してください。真のシングルトンを複合アプリケーションに組み込むことは決して良い考えではありません。

+0

シングルトンとMDIについては、「シングル」ファイルが開いているアプリケーションとMDIインターフェイスを持つことができます。 Visual Studioソリューションは、MDI環境内の単一のファイルです。 –

0

どちらの回答もありがとうございます。両方とも非常によく見えます。私は午前中に3つ目のアプローチを考え出しましたが、私はこれを試してみたいと思います。

起動時にすべてのモジュールを私のComposite WPFアプリケーションにロードし、最初に表示されます。したがって、表示されていないモジュールでも、スタートアップが完了するとすぐにすべてのモジュールを利用できます。

ファイルパスを初期化すると、ファイルパスを必要とする各モジュールは、PrismイベントアグリゲータのFileOpenedコンポジットイベントにサブスクライブします。シェルからファイルを開くと、シェルビューモデルはFileOpenedコンポジットイベントをパブリッシュします。コンポジットイベントはファイルパスをペイロードとして持ちます。

シェルビューモデルによってFileOpenedイベントが発行されると、各モジュールの適切なコールバックメソッドがPrismイベントアグリゲータによって呼び出され、filePathが各モジュールのビューモデルに渡されます。