Simple Injector vs Hiro vs Autofac

joe*_*dev 44 .net dependency-injection inversion-of-control autofac simple-injector

我是DI和IoC的新手,我正在尝试决定学习哪个IoC容器.我已经看到了几个性能比较,其中引用的三个容器似乎表现得非常好.但是,我没有找到包含Hiro或Simple Injector的功能比较.Autofac的社区似乎是最大的,但Hiro和Simple Injector在基准测试中非常快,而Simple Injector尤其声称非常容易学习.也就是说,我不想学习一个并且必须切换到另一个因为功能集有限.出于这个原因,我倾向于Autofac,因为它相当成熟,功能齐全(这里这里的好文章),也是最快的IoC容器之一.有没有人对这三个容器中至少有两个有过经验?你能提供任何功能比较吗?

Ste*_*ven 96

首先让我说我是Simple Injector背后的主要开发人员.

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

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

这就是说,学习依赖注入作为一种模式仍然需要花费更多的时间来学习使用特定的DI容器(Mark的书对两者都有帮助).容器 - 甚至简单注入器 - 将无法帮助您理解DI和SOLID(但是,它的一些限制试图促使您进行干净的应用程序设计).

简单的注入器在DI场景中相当新(或很晚).因此,它和其他人之间没有太多的比较(虽然这里这里有一些),与其他框架相比,用户数量有限,但迅速增加(根据Roy Osherove的一项旧调查,Simple Injector有当时的市场份额约为4%).令人遗憾的是,Simple Injector并没有进行过多次比较,因为它具有很强的功能(只需查看文档中的高级方案部分).您在(第1部分第2部分)链接的比较中缺少简单的注入器,因此这里是Simple Injector的功能列表(但请注意,Simple Injector被添加到作者的一个较新的比较中):

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

  • @gligoran:我指的是[SOLID](http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29)设计原则(我忘了包含一个链接).在可维护性问题的任何合理大小的软件中应用SOLID原则至关重要. (2认同)
  • 从2.4版开始,Simple Injector就有了一个Web API支持包.文档是[这里](https://simpleinjector.codeplex.com/wikipage?title=Web%20API%20Integration),NuGet包是[这里](https://www.nuget.org/packages/SimpleInjector. Integration.WebApi.WebHost.QuickStart). (2认同)