0

Unityについてはよく知っていると思いましたが、次のシナリオは例外ではありませんでした。Unity Containerを使用して、Prismのビューを次のような名前付き登録を持つオブジェクトとして登録しています。

_unityContainer.RegisterType<object, MyDummyView>("MyDummyViewName");

呼び出してビューのインスタンスをリクエストします

object view = _unityContainer.Resolve<object>("MyDummyViewName");

ここまでは順調ですね。システムにバグが見つかりました。ビューのインスタンスを解決するために間違った名前を使用したため、Unityによって例外がスローされると予想していました。

object view = _unityContainer.Resolve<object>("MyWrongDummyViewName");

ResolutionFailedExceptionただし、Unityは例外(または)をスローしませんActivationExceptionobject上記の呼び出しを行うと、指定された(間違った)名前でビューを登録せずに、新しいを返します。

これはUnityによる正しい動作ですか?ここで例外が発生することを本当に期待していました。Prismの範囲では、これは問題です。間違ったターゲット(ビュー)へのナビゲーション中に例外が発生しないためです。

4

1 に答える 1

1

これは予期しない動作です。問題は、具象クラスのインスタンスを解決しようとしているという事実に起因していると思います(あなたの場合object)。Unityは常にそのインスタンスを解決しようとするようです。それができる限り、名前付きマッピングは無視されます。

ViewBase宣言しない限りコンテナも解決する基本クラス()を試してみましたabstract。これを行うと、予期される例外が発生します。

問題を解決する必要のあるインターフェイスまたは抽象基本クラスを導入する場合。

Unityのバグチケットを開く必要があります。

于 2013-02-26T11:33:15.733 に答える