我对DI和IoC还不熟悉,正在尝试决定要学习哪个IoC容器。我看过几个性能比较,其中三个容器表现得非常好。但是,我没有找到包括Hiro或Simple Injector的功能比较。Autofac的社区似乎是最大的,但Hiro和Simple Injector在基准测试中速度非常快,而Simple Injector特别声称很容易学习。话虽如此,我不想学习一个容器,然后因为功能集有限而不得不切换到另一个容器。出于这个原因,我倾向于选择Autofac,因为它相当成熟且功能完备(好文章这里和这里),同时也是可用的最快的IoC容器之一。有没有人至少使用过这三个容器中的两个?可以提供任何功能比较吗?
让我先说一下,我是Simple Injector的首席开发人员。我同意Mark的观点,在大多数情况下容器的性能不是问题。然而,有些容器在某些方面表现非常差,很难从性能角度直观地感知哪些配置可能存在问题。无论使用哪种容器,大多数性能问题都可以通过更改配置(将注册更改为单例、添加缓存等)来解决。但此时配置容器可能会变得非常复杂。我们试图用Simple Injector解决这个复杂性问题。我喜欢让其他人决定我们是否成功了(或者是否having一个DI容器,或者说另一个 DI容器甚至有用)。然而,当我开始这个项目时,性能甚至不在我的初始列表中(简单性是),但(无锁和基于Expression树的)设计使我能够进行优化,使其成为领域内the fastest container之一(同时仍然非常功能丰富和可扩展)。在大多数情况下,您会发现性能非常接近手动实例化。这意味着,学习依赖注入作为一种模式需要更多的时间,而学习使用特定的DI容器所需的时间比较短(Mark的书可以帮助你两者都掌握)。即使是Simple Injector这样的容器也无法帮助你理解DI和SOLID(但它的一些限制试图推动你拥有一个清晰的应用程序设计)。Simple Injector是依赖注入领域中相对较新(或较晚)的框架。因此,与其他框架相比,它还没有太多的比较(尽管有一些这里和这里),用户数量相对较少,但正在快速增长(根据Roy Osherove的旧调查,当时Simple Injector的市场份额约为4%)。遗憾的是,Simple Injector没有被广泛比较,因为它具有很强的能力(只需查看文档中的高级场景部分即可了解)。Simple Injector在您提供的比较中(part 1和part 2)缺失,因此这里列出了Simple Injector的功能列表(但请注意,Simple Injector已被添加到作者的新比较之一)。 框架: Simple Injector 版本: 3.0 许可证: MIT 最小dlls: 1 大小: 342 KB 流畅性: 不需要,只需要编程 自动注册: 包括 属性使用: 不包括 (但可以通过扩展实现) XML使用: 不支持 属性注入: 是(选择加入)。 构造函数注入: 是 多个构造函数: 不包括, 但是可扩展 递归依赖: 有意义的错误 单例: 是 瞬态: 是 其他/自定义: 是,可插拔 自定义实例: 支持 开放泛型: 包括 未注册类型解析: 是 自动模拟: 不包括, 但是可扩展. 特殊功能: 诊断服务, 为泛型类型注册装饰器, 部分开放泛型, 条件/上下文注册和性能. 有NuGet扩展包可以实现Web请求和生命周期作用域等生命周期。基于Expression的API允许添加对几乎任何高级场景的支持,例如拦截(虽然推荐使用装饰器)。 我不知道您的需求是什么,但我敢肯定 Simple Injector 可以为您的项目服务一生。如果您遇到问题,请在 Stackoverflow.com 或 Simple Injector 论坛 上提问。Simple Injector 的贡献者和其他爱好者将乐意帮助您。不要忘记还有一群 Stackoverflow 用户可以帮助您解决通用的依赖注入问题。