4

各トップ レベル ウィンドウが独自の UI スレッドにある WPF/Prism アプリケーションを構築したいと考えています。それはかなり簡単です。Unity を DI コンテナーとして使用しており、コンテナーの階層を作成したいと考えています。最も単純なケースでは、ルート コンテナーはアプリケーション レベルにあり、各ウィンドウには子コンテナーがあります。各ウィンドウは、子コンテナーによってスコープが設定された独自の共有オブジェクトを持つことができるため、これは望ましいことです。

各ウィンドウには独自の UI スレッドがあるため、クロススレッドの問題が発生しないように、各ウィンドウに Prism の独自のリージョン マネージャーが必要です。Region と RegionManager が ServiceLocator.Current シングルトンを使用していることがわかります。これは問題です。RegionManager に、静的シングルトンでは不可能な範囲のコンテナーを使用させたいからです。この問題に遭遇した人はいますか?どうすれば回避できますか?

ありがとう!

4

2 に答える 2

0

私は実際に同じことをする必要があり、次の解決策を見つけました:

「子」リージョンに移動する前に、次の操作を行います。

var childRegion = _childRegionManager.Regions["ChildRegion"];            
_childRegion.NavigationService = _childContainer.GetExportedValue<IRegionNavigationService>();
_childRegion.NavigationService.Region = _childRegion;

これにより、子リージョンに正しいナビゲーション サービスが設定されます。

もちろん、適切に構成できるように、独自のカタログに をchildContainer含める必要があります。IRegionNavigationService

于 2012-02-19T11:12:11.590 に答える
0

Bootstrapper を子コンテナーとして保持し、そこに型を登録できます。そして、Bootstrappers を呼び出すアプリケーション レベルに ServiceLocater を配置します。

についての詳細情報; http://msdn.microsoft.com/en-us/library/ff649077.aspx

于 2011-05-07T21:41:24.843 に答える