【问题标题】:which IOC container is the most extensible and performant?哪个 IOC 容器最具可扩展性和性能?
【发布时间】:2011-03-05 20:47:36
【问题描述】:

.net 的 IOC 容器有很多,主要是 MEF、Spring.net、Castle Windsor、Unity 等。哪个是最具可扩展性和高性能的?在选择特定的 IOC 容器时应该考虑什么?

感谢广告

【问题讨论】:

  • 如果不确切知道您的公司需要什么,就无法提出建议。但就其价值而言,温莎城堡非常棒,强烈推荐。
  • 他们都很好。如果您想要一个高质量的答案,您应该讨论您正在构建的应用程序类型(桌面?Web?)您需要的功能(可扩展性?AOP?)以及您想要使用的其他框架(ASP.NET MVC?Prism ? ...) 否则这个问题的答案只是“我使用的东西很棒”,因为受访者都根据自己的需要选择了一个容器:)
  • 要对一些最流行的 IOC 容器进行简单的性能比较,请访问 www.IOCBattle.com
  • 这是一个很好的基准,作者保持最新状态:palmmedia.de/blog/2011/8/30/…

标签: .net ioc-container


【解决方案1】:

我认为阅读 Mark Seemann 的“.NET 中的依赖注入”一书是最好的方法。马克经历了几个容器,并且非常擅长所有容器。 http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501/ref=sr_1_1?ie=UTF8&qid=1326500032&sr=8-1

我认为 IOCBattle.com 没有告诉人们足够多的关于现实世界的使用和最佳实践来排除 Ninject 和 Castle,因为根据 MartinF 的结果,它们的速度要慢得多,MartinF 是一个鲜为人知的 IOC 容器的作者。

Ninject 非常易于使用,并且在 Apress MVC 3 书中。 Unity 正像来自 Microsoft 一样变得流行,而且 StructureMap 非常好(并且受到许多开发人员的青睐)。他们似乎表现得很好。除非拥有重磅网站的人已经接触过每个容器的基准测试性能,或者已经使用 JMeter 等工具对并发用户进行了性能和负载测试。

我认为其中一些基准无法准确反映产品。如果您的公司必须使用 Microsoft 堆栈,那么您必须使用 Unity(MEF 在大多数情况下缺乏太多功能)。如果您被“允许”使用 3rd 方/开源,那么 StructureMap、Ninject、Castle 和 Autofac 是最受欢迎的。同样,Mark 关于 DI 的书有图表,可以分解哪些具有自动注册、xml 配置、生命周期..,这些东西对于应用程序变得非常重要。

【讨论】:

    【解决方案2】:

    对于大多数项目,IoC 容器的性能不是问题,因此除非您有非常具体的性能需求,否则选择一个而不是另一个是一个糟糕的标准。

    MEF 作为容器有不同的关注点。它旨在用作插件存储库(想想运行时discovery),而不是传统的依赖注入,在这种情况下,您大多静态知道您的组件是什么以及它们应该如何连接.这不会让它变得更好或更糟,它只是有不同的目的。

    有关有点温莎偏见的比较,请参阅my answer to this similar question

    【讨论】:

    • +1 用于解释 MEF 的不同用途。我看到了很多关于它的错误信息。
    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多