我已经下载并运行了该示例并了解了大多数内容,除了我无法弄清楚 CategoryEditorViewModel 类从哪里获取它的构造函数参数。它是“ICategoryRepository categoryRepository”,我搜索了参考资料,但仍然无法理解创建视图模型时参数的传递方式和位置。我希望有人能帮我解答。
1 回答
我也有同样的问题。
据我从线程中发现的
更多的是,在 bootstrap.cs 文件的 Apuntas Notas 项目中,接口 ICategoryRepository 注册到类 CategoryRepository。
因此,当属性CategoryEditor
尝试通过以下方式解析 ViewModelLocator.cs 中的实例时
public CategoryEditorViewModel CategoryEditor
{
get { return _bootStrapper.Container.Resolve<CategoryEditorViewModel>(); }
}
并且实例不存在,它尝试CategoryEditorViewModel
使用其唯一需要ICategoryRespository
接口的构造函数创建该类的对象。
正如我之前提到的,我们在 bootstrap.cs 文件中使用CategoryRepository
类注册了这个接口。因此,它创建了一个 CategoryRepository 对象并将其传递给视图模型构造函数。
希望这可以消除您的疑问。
哦,如果你想知道如果你有多个构造函数会发生什么,你可以通过在 bootstrap.cs 中注册一个你喜欢的来注册一个类似的东西
Container.RegisterType<CategoryEditorViewModel>(new InjectionConstructor(typeof(ICategoryRepository), 5));
现在,如果您在 CategoryEditorViewModel 中有另一个构造函数还需要一个 int,则将调用该构造函数,而不是之前的构造函数。(传递一个 5 的 int 值非常愚蠢,但希望你能明白,你可以在那里为你的首选构造函数提供参数的类型,并确保它们也在引导容器中注册)