Prism v4:Unity还是MEF?

时间:2010-12-02 21:43:41

标签: wpf mvvm unity-container mef prism-4

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

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

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

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

例如:

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

  • ViewOnly地址记录

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

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

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

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

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

我已经通过WebService解决了下载DLL问题。 :)

4 个答案:

答案 0 :(得分:21)

没有“更好”:它们是不同的东西。

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

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

答案 1 :(得分:4)

如果所有模块都没有与应用程序同时重新编译,那么MEF为您提供了很多方法来应对主应用程序中不断变化的界面。否则MEF 可能比你需要的更复杂。

答案 2 :(得分:2)

我一直在使用Unity一年的PRISM,但我注意到一些严重的内存泄漏问题。因此我决定给PRISM 4和MEF一个去。我所做的是首先将我的应用程序转换为使用PRISM 4和Unity。然后我转换了一个分支来使用MEF。 这可能听起来很有趣,但MEF似乎处理内存消耗并以某种方式比Unity更好地发布。

很高兴听到其他人是否也有同样的经历?

答案 3 :(得分:2)

关于你的问题,MEF和UNITY是否可以很好地相互协作,我可以告诉你,他们彼此之间的工作非常好。我开发了一个使用PRISM,Unity和MEF的概念验证应用程序。