【问题标题】:Differences between MEF, EntLib and PrismMEF、EntLib 和 Prism 的区别
【发布时间】:2011-05-08 08:20:06
【问题描述】:

我有一个相对基本的问题,但最重要的是真的需要澄清一下,我一直在使用 Prism(复合应用程序指南)在 C# 中创建 WPF MVVM 桌面应用程序,这一点我都很清楚(或者我思想)以及基于 IoC 和基于模块的架构等。同时我已经开始使用 MEF 并意识到两者之间存在一种灰色区域(我发现并阅读了许多关于托管 MEF 扩展的文章/博客IoC 容器等。

但是....最近我开始研究 Enterprise Library 5,这就是导致我困惑的原因。它们在哪里组合在一起?所以 Prism 将 DI 与基于模块的架构一起使用……EntLib 将 Di 与应用程序块类型的架构一起使用……而 MEF 根本不使用 DI?这是否意味着 EntLib 和 Prism 是完全独立的架构方法,或者一个是另一个的子集? MEF 也可以与其中一个/两个一起使用吗?

欢迎任何解释。

非常感谢

【问题讨论】:

    标签: enterprise-library prism mef


    【解决方案1】:

    我也对 IoC 和 MEF 之间的区别感到困惑。我发现描述它们的最简单的方法是:

    MEF 用于发现和实例化你不知道的东西。

    IoC 用于请求您确实知道的事情。

    一点上下文。 MEF 将始终实例化您至少一次请求的导入。您无法自己创建它,并将其放入目录中以供使用。 MEF 负责创建和满足导入。动态加载的 DLL 就是一个很好的例子。

    另一方面,IoC - 您从当前库请求一个实现,然后您就得到了一个。但您也有责任确保实现存在。

    IoC 用于依赖注入。 MEF 是为了可扩展性。

    【讨论】:

    • 嗨乔希,非常感谢您的回答,这是描述和思考它们的好方法。我在第 9 频道找到了 Mike Taulty 的精彩视频,它基于 Silverlight,但也与 WPF 相关:channel9.msdn.com/blogs/matthijs/…
    • IOC,当使用 DI 适当地完成时,会公开允许您“了解”功能但不是驱动它的类的接口。这只是工作中的多态设计,但增加了复杂性 MEF 的独特之处在于它将使用反射动态生成 DLL。因此,它允许在不更改其他代码库的源代码的情况下更换 DLL。所以我完全同意 Josh 关于这个组件的观点,但是,我认为这对大多数人来说不是一个合理的方法。 msdn.microsoft.com/en-us/library/ff648478.aspxmsdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx
    • MEF => 应用程序插件
    【解决方案2】:

    看看这两个帖子:

    对于企业库,在 v5.0 中,我们将其设为与容器无关。即使 Enterprise Library 附带了开箱即用的 Unity 容器,它的架构也可以与您选择的任何容器或 MEF 一起使用。您确实需要提供适当的配置器(请参阅此 summary 末尾的配置器信息)

    【讨论】:

    • 嗨,Grigori,感谢您的链接,太好了!我是否认为 Prism 和 EntLib 之间的主要高级差异实际上是一种不同的架构方式(这个词是否存在??:-))程序?所以 Prsim 使用模块 - 因此可能适合 WPF Ui 开发,而 EntLib 使用 App Blocks,也许更多与服务器相关的工作?什么时候使用 Entlib 而不是 Prism 的一个很好的例子是什么?再次感谢,非常感谢。
    • James,这些都有不同的目标。 Prism 专门用于构建复合 UI(在 WPF 或 Silverlight 中),而 EntLib 是一个通用(而非特定于层)库,用于解决常见的横切问题,例如日志记录、验证、异常管理等。
    • 这种差异会在某处有用地突出显示,我想
    • @jameschinnock 对比这些库的有用链接:msdn.microsoft.com/en-us/practices/bb232643.aspx
    猜你喜欢
    • 2023-03-09
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多