IoC/DI 这个概念,最初是由 Martin Fowler 提出来的。之后,很快在 Java 社区大行其道。在 .net 社区,IoC 的流行要比 Java 晚一些。尽管如此,现在开源社区中也已经出现了很多使用 .net 编写的 IoC 框架,比较有代表性的有:Castle Windsor/Spring.net/Autofac/StructureMap/NInject/Unity...
为了解决一个相同的问题,相继出现这么多相似的框架(大家不厌其烦地重复造轮子),不能不说 IoC 的热度实在不凡。但这也给我们在选用 IoC 框架时带来一些困难。这么多可选项,到底选用哪个比较好呢。
有一个德国人 Daniel Palme 写了一篇文章 IoC Container Benchmark - Performance comparison,试图从性能和功能两方面对他所知的一些现有 IoC 框架做出评判,为此还专门在 github 上建了一个项目。
作者看了他的代码,觉得很可以借鉴,遂把他的代码拷贝过来,剔除了一些不能运行的项目(因为作者机器配置比较低,只能安装 .net4.0,而测试中有些项目要求 .net4.5 才能运行),再把自己的 My.Ioc 框架加入测试中,也做了一个性能比较,跟 My.Ioc 源码一起上传到 codeplex 中,感兴趣的同学可以自己到这里下载。
下面这张表格是作者在自己机器上测试的结果,仅供各位参考:
Container | Container | Request | Combined | Complex | Generics | IEnumerable | Conditional | Interception |
Ninject | 1760 | 2927 | 6372 | 17470 | 7100 | 13655 | 0 | 0 |
Unity | 511 | 569 | 1385 | 3876 | 0 | 6684 | 0 | 0 |
AutoFac | 418 | 875 | 1579 | 3723 | 1583 | 4123 | 0 | 0 |
MugenInjection | 420 | 394 | 550 | 1088 | 1281 | 1152 | 0 | 0 |
MyIoc | 198 | 204 | 224 | 292 | 222 | 410 | 0 | 0 |
SimpleInjector | 189 | 189 | 195 | 196 | 191 | 223 | 0 | 0 |
No | 183 | 182 | 185 | 189 | 0 | 0 | 0 | 0 |
至于 My.Ioc 的功能,如果您还想要进一步了解的话,请看这篇文章。