0

次の 2 つのコード ステートメントは類似しているという印象を受けました。

var region = regionManager.Region["SomeRegion"]
region.Add(container.Resolve<SomeView>());

regionManager.AddToRegion("SomeRegion", container.Resolve<SomeView>());

しかし、私のプロジェクトに示されているように、どちらも異なる結果をもたらします。驚いたことに、regionManager.AddToRegion ではスコープ領域を使用する必要はありませんが、region.Add ではスコープ領域が必要です。

repo を複製し、プロジェクトをビルドして実行してください。ViewB が既に登録されているという例外が発生するはずです。TestModule.cs (以下を参照) を開き、"region.add" 行にコメントを付け、regionManager.AddToRegion のコメントを解除すると、ソリューションが完全に機能することがわかります。

私はドキュメントを読み、region.Add と regionManager.AddToRegion を断続的に使用するプロジェクトを見てきましたが、API の動作が異なるようです。

https://github.com/rohits79/PrismRegionAmbiguity/blob/master/TestModule/TestModule.cs#L22-29

アップデート

AddToRegion を 3 行追加すると、アプリケーションが異常終了することに気付きました

regionManager.AddToRegion("ViewA", unityContainer.Resolve<ViewA>());

ただし、2行しかかかりません

region.Add(container.Resolve<ViewA>());

これは Prism の問題ではないように見えますが、スコープを作成せずに AddToRegion が機能するのはなぜでしょうか?

4

1 に答える 1

0

私は過去にこれを見たことがあります。それほど大したことではないので、時間をかけて調べたことはありません。AddToRegion は実際に Region.Add を呼び出すので、なぜこれが頭の中で起こるのか、よくわかりません。region.Activte を呼び出すとすぐにエラーが発生するため、これは Region タイプに依存すると思います。

ご存知のように、リージョンのインスタンスが複数ある場合は、常にスコープ付きリージョンを使用する必要があります。

于 2016-06-10T11:26:54.490 に答える