46

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

4

1 回答 1

99

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

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

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

这就是说,学习依赖注入作为一种模式仍然需要更多的时间,而不是学习使用特定的 DI 容器(Mark 的书对这两者都有帮助)。容器——甚至是简单的注入器——不会帮助你理解 DI 和SOLID(然而,它的一些限制试图推动你拥有一个干净的应用程序设计)。

Simple Injector 在 DI 场景中是相当新的(或迟到的)。正因为如此,它与其他框架之间没有太多的比较(尽管有一些herehere),并且与其他框架相比,用户数量有限但迅速增加(根据Roy Osherove 的一项旧民意调查,Simple Injector 有当时的市场份额约为 4%)。很遗憾,Simple Injector 没有进行很多比较,因为它有很多功能(例如,请查看文档中的高级场景部分)。您在(第 1部分和第 2部分)链接的比较中缺少简单的注射器),所以这里是 Simple Injector 的功能列表(但请注意,Simple Injector 已添加到作者的较新比较之一):

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

于 2011-11-19T00:07:07.463 回答