私はサンプルをダウンロードして実行しましたが、CategoryEditorViewModel クラスがコンストラクター引数をどこから取得するのかがわからないことを除いて、ほとんどすべてを理解しています。それは「ICategoryRepository categoryRepository」であり、参照を検索しましたが、ビューモデルの作成時にパラメーターがどのようにどこに渡されるかをまだ理解できません。誰かが答えを手伝ってくれることを願っています。
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値を渡すのはかなりばかげていますが、画像が得られることを願っています。そこで、優先コンストラクターのパラメーターのタイプを指定し、それらがブートストラップコンテナーにも登録されていることを確認できます)