【问题标题】:Simple Injector vs Hiro vs Autofac [closed]Simple Injector vs Hiro vs Autofac [关闭]
【发布时间】:2012-01-01 14:57:28
【问题描述】:

我是 DI 和 IoC 的新手,我正在尝试决定学习哪个 IoC 容器。我见过几个performance comparisons,其中引用的三个容器似乎表现得非常好。但是,我没有发现包含 Hiro 或 Simple Injector 的功能比较。 Autofac 的社区似乎是最大的,但 Hiro 和 Simple Injector 在基准测试中的速度非常快,特别是 Simple Injector 声称非常容易学习。也就是说,我不想学习一个并且不得不切换到另一个,因为功能集是有限的。出于这个原因,我倾向于 Autofac,因为它相当成熟且功能完整(好文章 herehere),并且是可用的最快的 IoC 容器之一。有没有人使用过这三个容器中的至少两个?你能提供任何功能比较吗?

【问题讨论】:

  • DI Containers 的性能在很大程度上无关紧要。除非您开发的应用程序与在 .NET 上编写的 99% 的应用程序大不相同,否则您的性能瓶颈将在其他地方 (I/O)。功能比较可以在这里找到:stackoverflow.com/questions/4581791/…
  • 我不知道您对“始终如一的好东西”的定义是什么,但我个人最喜欢 StructureMap 因为它的实用主义,它内置了一些其他人没有的好东西,但事实并非如此臃肿,而且速度非常快。 Ninject 很好,因为它具有出色的插件/nuget 支持。正如@Mark Seemann 所说,性能是判断容器的错误方法。
  • @MarkSeemann 在问这个问题之前我已经发现了这个问题。我认为您的比较图表很棒,但是缺少 Hiro 和 Simple Injector。正如我在这个问题中所说,很难找到包含 Hiro 和/或 Simple Injector 的功能比较,您引用的问题也不例外。针对该问题发布的唯一比较是基准测试,而不是功能。考虑到你写了一本书,你似乎对这个主题非常精通。需要详细说明吗?
  • @Brook 虽然我想了解人们对他们最喜欢的 IoC 容器是什么的看法,但这不是 SO 的格式,也不是我问的问题。如果我问这个问题已经结束了。我只想对我在标题中提到的三个容器的功能进行比较,这些容器来自至少使用过两个容器的个人。这使我保持在本网站上定义为好问题的范围内;)
  • 上次看 Hiro 时,我的印象是,它主要是一个概念证明,证明你可以制作一个与 newing 一样快的合成引擎手。除了非常快之外,它几乎没有“功能”。关于Simple Injector,我没有意见……

标签: .net dependency-injection inversion-of-control autofac simple-injector


【解决方案1】:

首先让我说我是Simple Injector 背后的首席开发人员。

我同意Mark 的观点,在大多数情况下,容器的性能不是问题。尽管如此,某些容器在某些方面的性能非常差,并且很难从性能的角度直观地感知配置的哪些部分可能会出现问题。无论您使用哪个容器,大多数性能问题都可以通过更改配置(将注册更改为单例、添加缓存等)来解决。然而,此时配置容器会变得非常复杂。我们试图用 Simple Injector 解决这种复杂性。我喜欢让其他人来决定我们是否成功(或者having 一个 DI 容器,或者 然而 另一个 DI 容器是否有用)。

然而,当我开始项目时,性能在我的初始列表中甚至没有那么高(简单性),但是(无锁和基于 Expression 树的)设计允许我进行优化,使其成为 @ 之一987654324@ 在该领域(同时仍然非常丰富且可扩展)。在大多数情况下,您会发现性能非常接近于手动新建实例。

也就是说,学习依赖注入作为一种模式仍然比学习使用特定的 DI 容器需要更多的时间(Mark's book 确实可以帮助两者)。容器——甚至是 Simple Injector——不会帮助你理解 DI 和 SOLID(但是,它的一些限制试图推动你拥有一个干净的应用程序设计)。

Simple Injector 在 DI 场景中是相当新的(或后期)。因此,它与其他框架之间没有太多比较(尽管有一些 herehere),并且与其他框架相比,用户数量有限但迅速增加(并且根据 old poll from Roy Osherove,简单喷油器当时的市场份额约为 4%)。很遗憾,Simple Injector 没有进行很多比较,因为它有很多功能(例如,请查看文档中的 advanced scenarios 部分)。您链接的比较中缺少 Simple Injector(part 1part 2),所以这里是 Simple Injector 的功能列表(但请注意 Simple Injector 是 added to one of the author's newer comparisons):

我不知道您的要求是什么,但我敢打赌,Simple Injector 可以在您的项目的整个生命周期内为您服务。如果您遇到问题,请在 Stackoverflow.com 或Simple Injector forum 上询问。 Simple Injector 贡献者和其他爱好者将很乐意为您提供帮助。不要忘记有一个bunch of Stackoverflow users 可以帮助您解决一般 DI 问题。

【讨论】:

  • 史蒂文,非常感谢您的参与!这帮助很大!
  • @gligoran:我指的是SOLID 设计原则(我忘了附上链接)。在可维护性成为问题的任何大小合理的软件中,应用 SOLID 原则至关重要。
  • 从 2.4 版开始,Simple Injector 有了 Web API 的支持包。文档是here,NuGet 包是here
  • 太棒了!该项目看起来很棒,我期待着尝试一下。谢谢!
  • @Steven Just FYI 您的答案中的 SOLID 链接链接回此页面。我想你的意思是让它链接到维基百科。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2011-07-08
  • 2017-06-20
  • 2012-08-07
  • 2016-09-19
相关资源
最近更新 更多