Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 棱镜v4:统一还是MEF?_Wpf_Mvvm_Unity Container_Mef_Prism 4 - Fatal编程技术网

Wpf 棱镜v4:统一还是MEF?

Wpf 棱镜v4:统一还是MEF?,wpf,mvvm,unity-container,mef,prism-4,Wpf,Mvvm,Unity Container,Mef,Prism 4,我下载并运行了安装程序。我进入目录并运行了以下两个批处理文件: 仅限桌面-使用Mef QuickStart.bat打开模块化 仅限桌面-使用Unity QuickStart.bat打开模块化 当我编译这些应用程序时,我没有看到任何真正的区别。我搜索了MEF vs Unity,找到了一些优点/缺点,但没有具体说明在Prism中使用是否“更好”(我知道这是主观的)。我想,如果我列出我的需求,也许有人能给我指出要使用的正确技术(即使不是Prism 4) 应用程序将使用WPF(而不是Silverl

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

  • 仅限桌面-使用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的问题。:)

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

依我看,你的选择应该只取决于你的需求。基于您在这里发布的要求,我建议您使用MEF,因为您的DLL中包含模块,而主应用程序不知道要加载的模块。这些任务是MEF存在的原因


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

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

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


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

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

使用2.1版PRISM和Unity和WPF…到目前为止我很高兴,但我个人没有使用MEF…你最终使用了什么?我正在看一个类似的范围内的项目,所以你的输入将是伟大的。谢谢,你有任何关于如何通过服务进行特权和下载的输入?任何意见或建议都会很好。他们彼此相处得很好,或者在让他们一起工作(MEF/Unity)方面,这里会有一些非常糟糕的成长烦恼。我和他们一起工作。他们完全独立。唯一的痛苦是当你在设计新的东西时,你必须声明它是一个可注入的依赖项还是一个外部组件。但大多数时候都很简单。在你的评论中解释我的+1:我喜欢注入依赖项与外部组件的措辞,以帮助区分unity或mef将提供什么服务。你能与我们共享该应用程序吗?我不明白为什么这个答案有3+,没有评论。要么这发生在其他人身上(这就是为什么他们应该+1和注释),要么内存泄漏与Unity完全无关。我自己从来没有遇到过这样的事情。