0

私はサンプルをダウンロードして実行しましたが、CategoryEditorViewModel クラスがコンストラクター引数をどこから取得するのかがわからないことを除いて、ほとんどすべてを理解しています。それは「ICategoryRepository categoryRepository」であり、参照を検索しましたが、ビューモデルの作成時にパラメーターがどのようにどこに渡されるかをまだ理解できません。誰かが答えを手伝ってくれることを願っています。

4

1 に答える 1

1

まったく同じ質問がありました。

私が次のようなスレッドから把握した限り

複数のパラメーターを持つコンストラクター

さらに、bootstrap.cs ファイルの Apuntas Notas プロジェクトでは、インターフェイス ICategoryRepository がクラス CategoryReporitory に登録されています。

したがって、プロパティCategoryEditorが ViewModelLocator.cs のインスタンスを解決しようとすると、

        public CategoryEditorViewModel CategoryEditor
    {
        get { return _bootStrapper.Container.Resolve<CategoryEditorViewModel>(); }
    }

インスタンスが存在しない場合、インターフェイスCategoryEditorViewModelを期待する唯一のコンストラクターでそのクラスのオブジェクトを作成しようとしICategoryRespositoryます。

前に述べたように、このインターフェイスはCategoryRepositoryクラスで bootstrap.cs ファイルに登録されています。したがって、CategoryRepository のオブジェクトを作成し、それをビューモデル コンストラクターに渡します。

これで疑問が解消されることを願っています。

ああ、複数のコンストラクターがあるとどうなるか疑問に思っている場合は、bootstrap.cs に次のように登録することで、好みのコンストラクターを登録できます。

Container.RegisterType<CategoryEditorViewModel>(new InjectionConstructor(typeof(ICategoryRepository), 5));

そして今、CategoryEditorViewModel に別のコンストラクターがあり、さらに int を期待している場合、それが以前のコンストラクターの代わりに呼び出されます。(5のint値を渡すのはかなりばかげていますが、画像が得られることを願っています。そこで、優先コンストラクターのパラメーターのタイプを指定し、それらがブートストラップコンテナーにも登録されていることを確認できます)

于 2013-01-06T22:06:20.013 に答える