私たちのアプリケーションにはいくつかのウィンドウがあります。現在、それらは別々のプロセスで実行されていますが、それによりそれらの間の通信が厄介になります (そして、JMS 接続などのリソースが増加します)。アイデアは、通信とリソース/サービスの共有を容易にするために、単一プロセスに向けて構造をリファクタリングすることでした。
私はこのようにプリズムモジュールを使用することについて考えました:
アイデアは、各ウィンドウの「メイン プログラム」をプリズム モジュールとしてロードし、各モジュールが適切と思われる独自の DI コンテナーを初期化できるようにすることでした (各ウィンドウは異なるチームによって作成されます)。モジュールは、他の UI に貢献することはありませんが、メイン MEF コンテナーを介してサービスを共有する場合があります。Main は、モジュールで利用できるいくつかの一般的なサービスをロードすることもできます。
各モジュールを独自の DI コンテナーに分離することで、モジュール間の依存地獄を回避し、別のモジュールからのサービスのより規律ある使用を奨励しようとしています。
- これは可能ですか、それとも DI コンテナーが互いに衝突しますか (同じプロセス内にありますか)?
- Prism には、この種のソリューションと戦うものはありますか?
- プリズム IModule の代わりに独自のミニモジュールシステムを作成する必要がありますか?
私たちが調査してきた別の可能性は、各モジュールを独自の AppDomain に配置することです。ただし、それには独自の欠点があります (共有サービスは wcf を介して行う必要があるなど)。ただし、個別の AppDomain を使用すると、DI コンテナーの衝突の可能性が回避され、AppDomain に障害が発生した場合にメインがウォッチドッグとして機能することができます。AppDomain ベースのソリューションの経験がある人はいますか? ここに記載されていない問題はありますか?