30

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

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

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

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

例如:

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

  • 仅查看地址记录

所有与地址相关的项目都在 Address.dll 中。

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

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

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

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

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

4

4 回答 4

21

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

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

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

于 2010-12-03T07:55:49.270 回答
4

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

于 2010-12-03T10:29:17.180 回答
2

我已经使用 PRISM 使用 Unity 一年多了,但我注意到一些严重的内存泄漏问题。因此,我决定试一试 PRISM 4 和 MEF。我所做的是首先将我的应用程序转换为在 Unity 中使用 PRISM 4。然后我将一个分支转换为使用 MEF。听起来可能很有趣,但 MEF 似乎比 Unity 更好地处理内存消耗和释放。

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

于 2011-02-12T00:23:30.170 回答
2

关于您的问题,MEF 和 UNITY 是否可以很好地相互配合,我可以告诉您,它们相互配合得很好。我开发了一个使用 PRISM、Unity 和 MEF 的概念验证应用程序。

于 2011-06-30T22:37:02.027 回答