Prism V4:Unity还是MEF?
-
30-09-2019 - |
题
我下载了 棱镜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的概念应用证明。