冒着进入圣战的风险,这些流行的DI/IoC框架的优点和缺点是什么,其中一个可以轻易地被认为是最好的吗?..:
Ninject
团结
城堡。温莎
Autofac
StructureMap
还有其他我没有在这里列出的c# DI/IoC框架吗?
在我的用例中,我正在构建一个WPF客户端应用程序,WCF/SQL服务基础设施,易用性(特别是在清晰简洁的语法方面),一致的文档,良好的社区支持和性能都是我选择的重要因素。
更新:
所引用的资源和重复的问题似乎已经过时了,那些了解所有这些框架的人能站出来提供一些真正的见解吗?
我知道大多数关于这个主题的观点可能是有偏见的,但我希望有人花时间研究所有这些框架,至少有一个总体上客观的比较。
如果以前没有人做过这样的调查,我很愿意自己做,但我认为至少有一些人已经做过了。
第二次更新:
如果您有使用多个DI/IoC容器的经验,请对它们的优缺点进行排序和总结,谢谢。这并不是一个发现人们所做的所有晦涩的小容器的练习,我正在寻找流行(和活跃)框架之间的比较。
我遇到了另一个性能比较(2014年4月10日的最新更新)。它比较了以下内容:
AutoFac
LightCore(网站为德语)
LinFu
Ninject
娇小的
简单注入器(所有参赛者中最快的)
春天。网
StructureMap
团结
温莎
宏
以下是这篇文章的简要总结:
Conclusion
Ninject is definitely the slowest container.
MEF, LinFu and Spring.NET are faster than Ninject, but still pretty
slow. AutoFac, Catel and Windsor come next, followed by StructureMap,
Unity and LightCore. A disadvantage of Spring.NET is, that can only be
configured with XML.
SimpleInjector, Hiro, Funq, Munq and Dynamo offer the best
performance, they are extremely fast. Give them a try!
Especially Simple Injector seems to be a good choice. It's very fast, has a good
documentation and also supports advanced scenarios like interception
and generic decorators.
您还可以尝试使用公共服务选择器库,并希望尝试多个选项,看看哪个最适合您。
关于公共服务选择器库的一些信息:
这个库提供了IoC容器和服务的抽象
定位器。使用库允许应用程序间接访问
不依赖于硬引用的功能。希望是
使用这个库,第三方应用程序和框架可以启动
来利用IoC/服务位置,而不将自己束缚在
具体的实现。
更新
13.09.2011: Funq和Munq加入参赛名单。图表也更新了,Spring。NET由于性能不佳而被删除。
04.11.2011:“Simple Injector的表现是所有选手中最好的”。
我遇到了另一个性能比较(2014年4月10日的最新更新)。它比较了以下内容:
AutoFac
LightCore(网站为德语)
LinFu
Ninject
娇小的
简单注入器(所有参赛者中最快的)
春天。网
StructureMap
团结
温莎
宏
以下是这篇文章的简要总结:
Conclusion
Ninject is definitely the slowest container.
MEF, LinFu and Spring.NET are faster than Ninject, but still pretty
slow. AutoFac, Catel and Windsor come next, followed by StructureMap,
Unity and LightCore. A disadvantage of Spring.NET is, that can only be
configured with XML.
SimpleInjector, Hiro, Funq, Munq and Dynamo offer the best
performance, they are extremely fast. Give them a try!
Especially Simple Injector seems to be a good choice. It's very fast, has a good
documentation and also supports advanced scenarios like interception
and generic decorators.
您还可以尝试使用公共服务选择器库,并希望尝试多个选项,看看哪个最适合您。
关于公共服务选择器库的一些信息:
这个库提供了IoC容器和服务的抽象
定位器。使用库允许应用程序间接访问
不依赖于硬引用的功能。希望是
使用这个库,第三方应用程序和框架可以启动
来利用IoC/服务位置,而不将自己束缚在
具体的实现。
更新
13.09.2011: Funq和Munq加入参赛名单。图表也更新了,Spring。NET由于性能不佳而被删除。
04.11.2011:“Simple Injector的表现是所有选手中最好的”。