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

  • 仅桌面 - 使用MEF QuickStart.bat打开模块化
  • 仅桌面 - unity quickstart.bat开放模块化

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

  • 该应用程序应在WPF中写(不是 Silverlight)。
  • 主要应用程序将非常薄。
  • 主应用程序将使用Web服务来构建一个人可以访问的“应用程序/模块”的菜单。
  • “应用程序/模块”将完全包含在其他托管库中。
  • 主应用程序通过反思这些DLL来获得视图和视图模型。
  • 主要的应用程序应在这些“应用程序/模块”中以伐木服务等方式提供服务。

例如:

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

  • ViewOnly地址记录

所有与地址相关的项目都在地址范围内。

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

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

所有与地址相关的项目都在地址范围内。
所有与管理相关的项目都在admin.dll中。

该应用程序实际上不应参考这些DLL中的任何一个,我计划反思它们,以便如果有100个不同的模块,并且用户只能访问其中2个,则只有2个被下载和使用。尽管有10个访问权限的用户获得了10个。

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

有帮助吗?

解决方案

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

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

无论如何,您可以同时使用它们:MEF用于模块化和统一性来依赖依赖注入的优势(可检验性,可重复使用,...)

其他提示

如果所有模块与应用程序的同一时间都没有重新编译,则MEF为您提供了许多应对主应用程序中更改接口的方法。否则MEF 可能 比您需要更复杂。

一年多来,我一直在使用Unity,但我注意到一些严重的记忆泄漏问题。因此,我决定给Prism 4和MEF尝试一下。我所做的是首先将我的应用程序转换为统一使用Prism 4。然后,我将一个分支转换为使用MEF。听起来可能很有趣,但MEF似乎可以处理记忆消耗并以某种方式释放比统一更好。

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

考虑到您的问题,MEF和Unity是否可以彼此合作,我可以告诉您,他们彼此之间的运作良好。我已经开发了使用Prism,Unity和MEF的概念应用证明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top