Prism v4:Unity还是MEF?

m-y*_*m-y 30 wpf mef unity-container mvvm prism-4

我下载了Prism v4并运行了安装程序.我进入目录并运行以下两个批处理文件:

  • 仅限桌面 - 使用Mef QuickStart.bat打开模块化
  • 仅限桌面 - 使用Unity QuickStart.bat打开模块化

当我编译这些应用程序时,我没有看到任何真正的区别.我已经搜索了MEF vs Unity,我发现了一些优点/缺点,但没有任何具体说明是否一个人在Prism中使用"更好"(我知道这是主观的).我想也许如果我列出我的要求,有人可以指出我使用的正确技术(即使它不是Prism 4).

  • 该应用程序将使用WPF(不是 Silverlight)编写.
  • 主要应用将非常薄.
  • 主应用程序将使用Web服务来构建一个人可以访问的"apps/modules"菜单.
  • "apps/modules"将完全包含在其他托管库中.
  • 主应用程序通过反映到这些DLL中来获取视图和视图模型.
  • 主应用程序应将日志记录等服务提供给这些"应用程序/模块".

例如:

基本用户可能有以下选项:

  • ViewOnly地址记录

所有相关地址都在Address.dll内.

高级用户可能具有以下选项:

  • 新地址记录
  • 打开地址记录(更新/删除)
  • 管理用户

所有相关地址都在Address.dll内.
管理相关的所有项目都在Admin.dll中.

应用程序不应该实际引用这些DLL中的任何一个,我打算反映它们,以便如果有100个不同的模块,并且用户只能访问其中的2个,则只下载和使用其中的2个.有权访问其中10个的用户获得10个用户.

我已经通过WebService解决了下载DLL.:)

ono*_*nof 21

没有"更好":它们是不同的东西.

IMO您的选择应该仅由您的要求驱动.根据您在此处发布的要求,我建议您使用MEF,因为DLL中包含模块,主应用程序不知道要加载的模块.这些任务是MEF存在的原因.

无论如何,你可以使用它们:MEF用于模块化,Unity用于利用依赖注入(可测试性,可重用性......)

  • 我和他们一起工作.他们是完全独立的.唯一的痛苦是当你设计一些新东西时,你必须说明它是一个注射依赖还是一个外部组件.但大多数时候都很容易. (10认同)
  • 在你的评论中解释我的+1:我喜欢**注射依赖**vs**外部组件**措辞,以帮助区分统一或mef所服务的内容. (6认同)