Dependency injection MEF和IoC容器之间的差异(如Unity、Autofac、SMap、Ninject、Windsor.Spring.net等)

Dependency injection MEF和IoC容器之间的差异(如Unity、Autofac、SMap、Ninject、Windsor.Spring.net等),dependency-injection,inversion-of-control,mef,ioc-container,structuremap,Dependency Injection,Inversion Of Control,Mef,Ioc Container,Structuremap,我一直在搜索依赖注入,并阅读了一些文章。 但我仍然无法找出MEF和其他国际奥委会的区别。 所以,我的问题是:在哪种情况下,我更喜欢使用MEF或IoC容器 为什么将MEF与PRISM一起用于(WPF和Silverlight)或桌面应用程序很好 而在web应用程序中,人们使用IoC容器 那么,决定我应该使用哪种依赖技术的标准是什么 我已经看完了这篇文章,但我无法确定任何事情。最后,我对MEF vs IoC容器的结论如下: 当需要处理未知类型或基于插件的体系结构时,最好使用MEF IoC容器最好与已知

我一直在搜索依赖注入,并阅读了一些文章。 但我仍然无法找出MEF和其他国际奥委会的区别。 所以,我的问题是:在哪种情况下,我更喜欢使用MEF或IoC容器

为什么将MEF与PRISM一起用于(WPF和Silverlight)或桌面应用程序很好

而在web应用程序中,人们使用IoC容器

那么,决定我应该使用哪种依赖技术的标准是什么


我已经看完了这篇文章,但我无法确定任何事情。

最后,我对MEF vs IoC容器的结论如下:

当需要处理未知类型或基于插件的体系结构时,最好使用MEF

IoC容器最好与已知类型一起使用

此外,MEF是一种依赖注入的体系结构解决方案

然而,IoC容器是用于依赖注入的代码级解决方案

IoC容器只是填充类实例的依赖注入技术,如果这些类的构造函数需要其他类的对象,那么IoC也会注入所需的对象。但是MEF不仅仅是依赖注入。虽然MEF也使用基于IoC的方法进行依赖项注入,但除了依赖项注入之外,MEF还做了很多其他事情

MEF有两个组成部分:

  • 目录:负责发现扩展

  • 容器:提供将扩展加载到正在运行的 应用

  • MEF不仅仅是依赖注入技术。它用于我们的应用程序需要基于插件的体系结构,但同时MEF使用基于IoC的方法进行依赖注入


    我期待更多的人对此发表评论。

    IoC是一种架构设计策略,而MEF是设计模式依赖注入的实现。依赖注入(DI)通常是IoC的实现策略。通常使用术语IoC容器,表明IoC是一种技术

    不,不是这样的。IoC是一个宽泛的概念,DI是实现IoC核心的设计模式。MEF是某种形式的DI,但它并没有国际奥委会的所有基本特征

    MEF使用组合来找出它需要解决的依赖项。这与许多其他IoC容器非常相似,例如Pico和。但就到此为止。我没有看到任何生命周期管理或池配置。后两个问题我认为是IOC(不是DI)的一个基本部分,因为调用方的性能不应该受到被调用方使用的内存消耗的影响。 IoC原则是通过松散耦合调用者和被调用者,为他们提供服务。这样,两种功能都可以优化工作。MEF可能存在优化问题。例如,当您从菜单调用数据库时,在某个时间将调用数据库。为此,最好使用池。MEF无法做到这一点

    应用程序的类型应该独立于设计模式的选择。桌面应用程序和web应用程序之间没有太大区别。两者都是用户界面,都应该能够使用MEF和IoC。如果功能简单且不需要跨越优化边界(如数据库调用),那么MEF是首选,因为它是使用.NET 4时出现的框架。这样可能会很有用,但如果调用跨越了优化边界(如解析或上载文件),那么使用IoC容器对性能和维护会更有成效

    我使用的信息:

    • (对格伦·布洛克的播客采访)

    • (MSDN)

    • (维基百科)


    有用帖子:@duga感谢您的链接,但我还是想知道MEF是否可以与已知类型一起工作,以及为什么在Silverlight和WPF(MVVM模型)中使用MEF,无论它们是否具有未知类型,都是一篇关于此比较的好文章。作者最后的结论有点吓人-
    坏消息是,在选择一个工具三个月后,你会遇到一个用另一个工具更容易解决的问题。