主要的C#DI / IoC框架如何比较?
冒着进入圣战领域的风险,这些流行的DI / IoC框架的优点和弱点是什么?可以轻易认为是最好的吗? ..:
是否还有其他针对C#的DI / IoC框架,我没有在这里列出?
在我的使用案例中,我构建了一个客户端WPF应用程序和一个WCF / SQL服务基础架构,易用性(特别是语法清晰简洁),一致的文档,良好的社区支持和性能都是重要的因素在我的选择。
更新:
所引用的资源和重复问题似乎已经过时,能否了解所有这些框架的知识并提供一些真正的见解?
我意识到关于这个问题的大多数意见可能会有偏差,但我希望有人花时间研究所有这些框架,并且至少有一个客观的比较。
如果以前没有做过,我很乐意进行自己的调查,但我认为这是至少有几个人已经做过的事情。
第二次更新:
如果您对多个DI / IoC容器有经验,请对这些容器的优缺点进行排序和总结,谢谢。 这不是发现人们所做的所有晦涩难懂的小容器的练习,我正在寻找流行(和主动)框架之间的比较。
虽然这个问题的综合答案占用了我的书的数百页,但下面是我仍在研究的快速比较图表:
我遇到了另一个性能比较(最新更新2014年4月10日)。 它比较以下内容:
以下是帖子的简要总结:
结论
Ninject绝对是最慢的容器。
MEF,LinFu和Spring.NET比Ninject更快,但仍然很慢。 紧随其后的是AutoFac,Catel和Windsor,其次是StructureMap,Unity和LightCore。 Spring.NET的缺点是,只能用XML配置。
SimpleInjector,Hiro,Funq,Munq和Dynamo提供最佳性能,它们非常快。 给他们一个尝试!
特别简单的注射器似乎是一个不错的选择。 它非常快速,具有良好的文档,并且还支持拦截和通用装饰器等高级场景。
您还可以尝试使用通用服务选择器库,并希望尝试多个选项,并查看哪些最适合您。
有关来自站点的通用服务选择器库的一些通知:
该库提供了对IoC容器和服务定位器的抽象。 使用库允许应用程序间接访问这些功能而不依赖于硬引用。 希望通过使用这个库,第三方应用程序和框架可以开始利用IoC /服务位置,而不必将自己归结为特定的实现。
更新
2011年9月13日: Funq和Munq被加入参赛名单。 图表也进行了更新,Spring.NET由于性能不佳而被删除。
2011年11月4日: “添加简单注射器,表现是所有参赛者中最好的”。
请阅读Philip Mat撰写的这个伟大的.Net DI容器比较博客。
他做了一些彻底的性能比较测试;
他建议使用Autofac,因为它体积小,速度快,易于使用......我同意。 看来Unity和Ninject是他测试中速度最慢的。
链接地址: http://www.djcxy.com/p/82105.html