新棱镜项目 - 使用MEF还是Unity?

Jon*_*gel 14 prism mef unity-container

我正在开始一个新的个人Prism 4项目.Reference Implementation目前使用Unity.

我想知道我是否应该使用MEF,或者只是保持Unity.

我知道有几个讨论提到这两个是不同的,它们确实有重叠,但如果我一直选择Unity,我会错过吗?

Pat*_*Pat 23

另请查看文档:

关键决策:选择依赖注入容器

Prism Library为依赖注入容器提供了两个选项:Unity或MEF.棱镜是可扩展的,从而允许使用其他容器而不需要一点工作.Unity和MEF都为依赖注入提供了相同的基本功能,即使它们的工作方式完全不同.

两个容器提供的一些功能包括:

  • 它们都使用容器注册类型.
  • 他们都用容器注册实例.
  • 它们都强制创建已注册类型的实例.
  • 它们都将注册类型的实例注入到构造函数中.
  • 它们都将已注册类型的实例注入属性.
  • 它们都具有用于标记需要管理的类型和依赖项的声明性属性.
  • 它们都解决了对象图中的依赖关系.

Unity提供了MEF不具备的几种功能:

  • 它解决了没有注册的具体类型.
  • 它解决了开放的泛型.
  • 它使用拦截来捕获对象的调用并向目标对象添加其他功能.

MEF提供了Unity不具备的几种功能:

  • 它发现目录中的程序集.
  • 它使用XAP文件下载和程序集发现.
  • 它会在发现新类型时重新组合属性和集合.
  • 它会自动导出派生类型.
  • 它与.NET Framework一起部署.


小智 7

我目前正在进行同样的调查.我上周参加了雷德蒙德的p&p研讨会.我有机会与一些p&p人聊天.

MEF

+ .net的一部分,不需要额外的库

+在可扩展性,模块化方案方面非常强大

- 更通用的方法,对于DI场景不太灵活

- 你需要用属性装饰,你的代码粘在MEF上

统一

+ DI场景非常灵活

+如果您坚持使用ctor注入并避免使用命名实例,那么您不需要使用任何属性.您的大部分系统都不依赖Unity

- 对可扩展性,模块化方案的开箱即用支持

- 需要部署第三方库

我认为一个好主意是使用MEF进行扩展(管理应用程序的模块,本地化注册)并使用Unity进行DI.