为什么在创建 MvvMCross 视图查找时 "removing any who's ViewModel PropertyType is an interface" table

Why "removing any who's ViewModel PropertyType is an interface" when creating the MvvMCross View lookup table

在 MvvMCross 中创建默认视图查找 table 时,有一个步骤 "removing any who's ViewModel PropertyType is an interface"。 (http://slodge.blogspot.de/2013/01/overriding-view-lookup-convention-used.html)为什么要执行这一步?

很明显,您无法实例化接口,但如果我写 Mvx.Register<IMyViewModel, MyViewModel>(),我可以导航到使用 ShowViewModel<IMyViewModel>() 实现 ViewModel 的接口。 View creator 不是使用 DI table 吗?

当我们在 2013 年查看 Mvx 的这个区域时,我们并没有真正找到任何想要将每个 ViewModel 隐藏在界面后面的用户,我们真的没有遇到想要使用界面进行导航的用户。

相反,用户普遍希望:

  • 直接导航到真正的 ViewModel 类型
  • 偶尔使用接口将 ViewModel 组合在一起 - 例如对于 IRefreshableViewModel 个分组。

在接口用于分组的情况下 - 例如对于 IRefreshableViewModel,然后很常见地看到基数 View class 也实现了 - 并且看到它有一个 IRefreshableViewModel ViewModel 属性。您提到的步骤中应该删除这些视图。

因此,我们没有为默认的 ViewModel 导航使用接口...因此 ViewModel 不在 DI/IoC/ServiceLocator 查找系统中。

但是,我们确实让 Mvx 保持开放状态以供调整 - 它在宣言中 - 所以如果你的应用程序想要通过界面导航,并且如果你希望你的视图引用 ViewModel 界面而不是具体的 classes,那么你绝对可以做到这一点 - 你只需要重写设置步骤来放置你的 View-ViewModel 查找和你的 ViewModel 工厂(实际上在 wiki 中有这方面的详细信息)