哪些C#/。NET依赖注入框架值得研究?您能说出它们的复杂性和速度。
哪些C#/。NET依赖注入框架值得研究?您能说出它们的复杂性和速度。
Answers:
编辑(不是作者):在https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc上有完整的IoC框架列表:
原始答案如下。
我想我可能在这里有点挑剔,但是必须注意,DI(依赖注入)是一种编程模式,并且通过IoC(控制反转)框架得以实现,但并不需要。IoC框架使DI变得更加容易,并且除DI之外,它们还提供了许多其他好处。
话虽这么说,我敢肯定这就是你要的。关于IoC框架;我曾经经常使用Spring.Net和CastleWindsor,但是后面真正的痛苦是您必须编写的所有讨厌的XML配置!他们现在几乎都以这种方式移动,所以我在过去一年左右的时间里一直在使用StructureMap,并且由于它已经使用强类型的泛型和注册表迁移到了流畅的配置中,所以我在使用IoC时遇到的痛苦障碍已降至零下!现在我知道我的IoC配置是在编译时检查的(大部分情况下),我得到了一个绝对的惊喜,而我对StructureMap及其速度一无所获。我不会说其他的运行时很慢,但是对我来说它们设置起来更加困难,而挫败感常常会赢得胜利。
更新资料
我在我的最新项目中一直使用Ninject,使用它绝对是一种乐趣。话语让我有些失望,但是(正如我们在英国所说),这个框架就是“狗”。对于任何您希望快速启动并运行的绿色领域项目,我都极力推荐它。我从贾斯汀·埃瑟里奇(Justin Etheredge)精彩的Ninject截屏中获得了我所需的一切。我完全看不到将Ninject改写到现有代码中是个问题,但是根据我的经验,对StructureMap也可以这么说。在这两者之间前进将是一个艰难的选择,但是我宁愿竞争而不是停滞,那里还有相当数量的健康竞争。
其他IoC截屏视频也可以在Dimecasts上找到。
这取决于您要寻找的内容,因为它们各有优缺点。
Spring.NET
是最成熟的,因为它来自Java世界,是Spring发行的。Spring有一组非常丰富的框架库,这些框架库可以对其进行扩展以支持Web,Windows等。Castle Windsor
是.NET平台中使用最广泛的应用程序之一,并且具有最大的生态系统,具有高度可配置性/可扩展性,具有自定义生命周期管理,AOP支持,固有的NHibernate支持,并且是一个很棒的容器。Windsor是整个堆栈的一部分,其中包括Monorail,Active Record等。NHibernate本身建立在Windsor之上。Structure Map
通过内部DSL具有非常丰富和精细的配置。Autofac
是新时代的IoC容器,它具有所有固有的功能编程支持。在管理生命周期方面,它也采用了其他方法。Autofac仍然很新,但是它突破了IoC的极限。Ninject
我听说更多的是裸露的骨头,更少的是更多的方法(听说没有经验)。Unity
是:它来自Microsoft(p&p)并受其支持。Unity具有非常好的性能和完善的文档。它也是高度可配置的。它没有说城堡/结构图的所有优点。综上所述,这实际上取决于对您而言重要的内容。我会同意其他人的意见,并评估并确定哪一个适合。令人高兴的是,您可以选择多种甜甜圈,而不必只吃一个果冻。
Autofac。 https://github.com/autofac/Autofac确实非常快而且非常好。这是进行比较的链接(在Ninject修复内存泄漏问题之后进行)。
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject很棒。好像真的很快,但是我没有做任何比较。我知道作者Nate在Ninject和其他DI框架之间进行了一些比较,并且正在寻找提高Ninject速度的更多方法。
我听过很多人尊重我说的关于StructureMap和CastleWindsor的好东西。在我看来,这些就是现在要考虑的三大要素。
我使用简单注入器:
Simple Injector是一个简单,灵活和快速的依赖项注入库,它使用最佳实践来指导您的解决方案迈向成功之路。
我可以推荐Ninject。它使用起来非常快捷且容易,但是只有在不需要XML配置的情况下,否则您才应该使用Windsor。
我过去使用过Spring.NET,并在此方面取得了巨大的成功。我从来没有注意到它有任何实质性的开销,尽管我们使用它的项目本身就很繁重。阅读文档只花了一点时间就可以完成设置。
C#的伟大之处在于,它遵循了Java开发人员多年之前所走过的道路。因此,通常来说,在寻找具有这种性质的工具时,我的建议是寻找可靠的Java答案,并查看是否存在.NET改编版。
因此,当涉及到DI(并且有很多选择,这确实是一个品味问题)是Spring.NET。此外,研究项目背后的人员总是明智的。建议使用SourceGear产品进行源代码控制(使用它们之外)没有问题,因为我尊重Eric Sink。我看过马克·波拉克(Mark Pollack)的讲话,我能说什么,这个家伙就明白了。
最后,有很多DI框架,您最好的选择是使用其中一些进行一些示例项目并做出有根据的选择。
祝好运!
我认为Ninject是一个不错的起点,它是新的,并且已经考虑到许多微调,而且确实非常快。开发人员Nate确实拥有一个不错的网站和强大的支持。