【问题标题】:Prism v4: Unity or MEF?Prism v4:Unity 还是 MEF?
【发布时间】:2010-12-02 21:43:41
【问题描述】:

我下载了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的问题。 :)

【问题讨论】:

  • 将 Prism 2.1 与 Unity 和 WPF 一起使用...到目前为止很开心,虽然没有亲自使用过 MEF...
  • 你最后做了什么?我正在研究一个类似范围的项目,所以您的意见会很棒。
  • 谢谢,您对您如何通过服务获取权限和下载有任何意见吗?任何输入或提示都会很棒

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


【解决方案1】:

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

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

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

【讨论】:

  • 他们是否相处得很好,或者在让他们一起工作(MEF / Unity)方面会成为一些非常糟糕的成长痛苦。
  • 我和他们一起工作。他们是完全独立的。唯一的痛苦是当您设计新的东西时,您必须说明它是可注入的依赖项还是外部组件。但大多数时候都很容易。
  • 解释我对您的评论的 +1:我喜欢 可注入依赖项外部组件 的措辞,以帮助区分统一或梅夫。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    很高兴知道其他人是否有同样的经历?

    【讨论】:

    • 我不明白为什么这个答案有 3 +,没有 cmets。要么这发生在其他人身上(这就是他们应该 +1 和评论的原因),要么内存泄漏与 Unity 完全无关。我自己从来没有遇到过这样的事情。
    【解决方案4】:

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

    【讨论】:

    • 你能和我们分享那个应用程序吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多