简单的喷油器vs Hiro vs Autofac
我是DI和IoC的新手,我试图决定要学习哪个IoC容器。 我已经看到几个性能比较 ,其中三个容器引用似乎performance非常好。 但是,我没有发现包含Hiro或Simple Injector的function比较。 Autofac的社区似乎是最大的,但Hiro和简单的喷油器在基准testing中的速度非常快,特别是简单的喷油器声称非常容易学习。 也就是说,我不想学习一个,因为function集是有限的,所以不得不切换到另一个。 因为这个原因,我倾向于Autofac,因为它相当成熟,function齐全( 这里和这里都有很好的文章),也是最快的IoC容器之一。 有没有人有三个这些容器中的至less两个的经验? 你能提供任何function比较?
让我开始说我是Simple Injector的主要开发人员。
我同意马克的观点,大多数情况下,容器的性能不是问题。 尽pipe如此,一些容器在某些方面性能很差,从性能的angular度来看,很难直观地感觉到configuration的哪些部分会有问题。 大多数性能问题可以通过更改configuration(更改注册到单例,添加caching等)来解决,无论使用哪个容器。 但是,在这一点上,configuration容器可能会非常复杂。 我们试图用Simple Injector来解决这个复杂问题。 我喜欢让别人决定我们是否成功(或者是否有一个DI容器,或者另一个DI容器甚至是有用的)。
然而性能上,当我开始这个项目的时候,我的初始列表还没有那么高(简单),但是(无锁和基于Expression
树的)devise让我能够进行优化,使它成为现场最快的容器之一(虽然function非常丰富,而且非常可扩展)。 在大多数情况下,您会发现性能非常接近手动新增事件。
这就是说,学习dependency injection作为一种模式还需要花费更多的时间,而不是学习如何使用特定的DI容器( Mark的书可以真正帮助两者)。 一个容器,即使简单的注入器,也不会帮助你理解DI和SOLID (但是,它的一些限制试图推动你有一个干净的应用程序devise)。
简单的注射器是相当新的(或迟到)在DI场景。 正因为如此,它和其他人之间没有太多的比较(虽然这里和这里有一些),用户数量与其他框架相比是有限的,但迅速增加(根据Roy Osherove的一个老调查 ,Simple Injector曾当时的市场份额约为4%)。 这是一个耻辱,简单的注射器不是比较了很多,因为它是很多的能力(只是看例如在文档中的高级场景部分)。 ( 第1部分和第2部分 )链接的比较中缺less简单的注射器,所以下面是简单注射器的function列表(但请注意简单注射器已添加到作者的新比较之一 ):
- 框架 : 简单的喷油器
- 版本 : 3.0
- 许可证 : MIT
- 最小dll : 1
- 大小 :342 KB
- stream利 :不需要,只有编程
- 自动注册: 包括
- 属性用法 :不包括(但可以通过扩展 )
- XML用法 : 不支持
- 物业注入 : 是(selectjoin) 。
- build设者注入 : 是的
- 多个构造函数 :不包含,但可扩展
- recursion依赖 :有意义的错误
- 辛格尔顿 : 是的
- 瞬态 : 是的
- 其他/自定义 : 是,可插拔
- 自定义实例 :支持
- 开放的generics : 包括在内
- 未注册的typesparsing : 是
- 自动嘲笑 : 不包括 ,但可扩展 。
- 特殊function : 诊断服务 , 注册genericstypes的装饰器 ,部分开放generics, 条件/上下文注册和性能 。 有生活方式的NuGet扩展包,如Web Request和Lifetime Scoping 。 基于
Expression
的API允许添加对几乎任何高级场景的支持,比如拦截 (尽pipe使用装饰器被提升)。
我不知道你的要求是什么,但我敢打赌,简单的注射器可以为您的项目生命周期服务。 如果您遇到问题,请在此处询问Stackoverflow.com或简单注射器论坛 。 简单的喷油器贡献者和其他爱好者将很乐意帮助你。 不要忘记,有一堆Stackoverflow用户可以帮助你解决一般的DI问题。