3

我读过很多文章,其中在 ViewModelLocator 中使用 MEF 来分离设计时数据和运行时数据(具体来说,导入 designtiem ViewModels 和运行时 ViewModels)。(我说的是MVVM-light框架中的VMLocator)

MEF 是一项出色的技术,但它不是为未知依赖而设计的吗?显然,设计时/运行时 ViewModel 是已知的依赖关系,应该由纯 IOC 容器处理。

有人可以解释一下吗?谢谢

4

1 回答 1

2

是的,MEF 主要是为未知的依赖关系设计的,但它肯定也可以用于已知的依赖关系。几个月前,我自己在 MEF 之上构建了一个有效的服务定位器。

我看到了在这里使用 MEF 有意义的几个原因:

  • 从 .NET 4.0 开始,它是框架的一个组成部分。不需要有另一个第三方依赖。

  • 它涵盖了依赖发现和 IoC。不管 API 是否看起来是为发现量身定做的,您仍然可以获得这两个功能。根据我的经验,依赖发现是对 IoC 容器的一个很好的补充。

  • 它具有很好的可扩展性选项,通常仅用于这些目的,例如为视图模型定位器构建您自己的零件目录,以便能够提供设计时模型

我认为人们选择 MEF 的原因是它在一个包中提供了这些 MVVM 模式和场景所需的一切,并且随时可用。并不是说它一定是该领域中最好的。

这几乎不是您正在寻找的答案,但我以类似的方式使用了 MEF,所以我添加了一个意见:)

于 2013-03-11T16:40:59.470 回答