哪些.NET依赖注入框架值得研究?[关闭]


386

哪些C#/。NET依赖注入框架值得研究?您能说出它们的复杂性和速度。


13
IoC容器基准测试-性能比较具有针对20多种产品的性能和功能比较表,并使它们保持最新。它推荐使用简单喷射器
Michael Freidgeim 2013年

我感谢Ninject&Maestro。我很高兴获得最高评价的答案表示Ninject是“绝对的荣幸”
Razvan Dumitru 2014年

6
我要强调的是,在研究IoC容器之前,应该先没有一个容器进行管理。手动进行布线和注入,除非您有一些非常复杂或大型的系统,否则这实际上并不复杂,也不需要大量代码。当您觉得自己了解它并且变得繁琐时,您将更适合了解wuold可以为您提供什么样的框架。但是没有规则说项目必须具有IoC容器才能正常进行DI。
2016年

1
从无开始。手动创建所需的对象图。不同的框架有不同的方法,这取决于您的需求。在选择一个功能之前,您需要确定最需要的功能。
法比奥

由于dotnetcore是未来,因此您不妨坚持其内置的DI支持。这是非常好的,高度可定制的。
ATL_DEV

Answers:


339

编辑(不是作者):在https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc上有完整的IoC框架列表:

  • 温莎城堡(Castle Windsor) -温莎城堡(Castle Windsor)是同类最佳,成熟的Inversion of Control容器,可用于.NET和Silverlight
  • Unity-轻量级可扩展依赖项注入容器,支持构造函数,属性和方法调用注入
  • Autofac-令人上瘾的.NET IoC容器
  • DryIoc-简单,快捷的全功能IoC容器。
  • Ninject-.NET依赖注入程序的忍者
  • StructureMap-.Net的原始IoC / DI容器
  • Spring.Net-Spring.NET是一个开放源代码应用程序框架,使构建企业.NET应用程序更加容易
  • LightInject-超轻量的IoC容器
  • 简单注入器 -简单注入器是用于.NET 4+的易于使用的依赖注入(DI)库,它支持Silverlight 4 +,Windows Phone 8,Windows 8(包括通用应用程序)和Mono。
  • Microsoft.Extensions.DependencyInjection-ASP.NET Core应用程序的默认IoC容器。
  • Scrutor -Microsoft.Extensions.DependencyInjection的程序集扫描扩展。
  • VS MEF -Visual Studio使用的托管扩展框架(MEF)实现。
  • TinyIoC-简单易用,无忧的控制容器反转版,适用于小型项目,图书馆和初学者。

原始答案如下。


我想我可能在这里有点挑剔,但是必须注意,DI(依赖注入)是一种编程模式,并且通过IoC(控制反转)框架得以实现,但并不需要。IoC框架使DI变得更加容易,并且除DI之外,它们还提供了许多其他好处。

话虽这么说,我敢肯定这就是你要的。关于IoC框架;我曾经经常使用Spring.NetCastleWindsor,但是后面真正的痛苦是您必须编写的所有讨厌的XML配置!他们现在几乎都以这种方式移动,所以我在过去一年左右的时间里一直在使用StructureMap,并且由于它已经使用强类型的泛型和注册表迁移到了流畅的配置中,所以我在使用IoC时遇到的痛苦障碍已降至零下!现在我知道我的IoC配置是在编译时检查的(大部分情况下),我得到了一个绝对的惊喜,而我对StructureMap及其速度一无所获。我不会说其他的运行时很慢,但是对我来说它们设置起来更加困难,而挫败感常常会赢得胜利。

更新资料

我在我的最新项目中一直使用Ninject,使用它绝对是一种乐趣。话语让我有些失望,但是(正如我们在英国所说),这个框架就是“狗”。对于任何您希望快速启动并运行的绿色领域项目,我都极力推荐它。我从贾斯汀·埃瑟里奇(Justin Etheredge)精彩的Ninject截屏中获得了我所需的一切。我完全看不到将Ninject改写到现有代码中是个问题,但是根据我的经验,对StructureMap也可以这么说。在这两者之间前进将是一个艰难的选择,但是我宁愿竞争而不是停滞,那里还有相当数量的健康竞争。

其他IoC截屏视频也可以在Dimecasts上找到


1
很高兴看到高质量的,经过深思熟虑的答案关于这支班轮。您说服我检查了StructureMap。
克里斯·玛拉斯蒂·乔治

7
不错,但是说句公道话-温莎现在也有一个非常完善的,流畅的界面。
Krzysztof Kozmic

您能否解释一下IoC框架除了可以轻松实现DI之外还提供了“其他好处”?
fearofawhackplanet

@fearofawhackplanet IoC容器只能用穷人的DI来做的唯一事情之一就是Interception。很好的总结在这里:kenneth-truyers.net/2013/05/16/...
马蒂厄·金敦

1
我看过一对夫妇的来源说,Ninject是最慢的palmmedia.de/blog/2011/8/30/...stackoverflow.com/questions/4581791/...
卢克牛逼奥布莱恩

77

这取决于您要寻找的内容,因为它们各有优缺点。

  1. Spring.NET是最成熟的,因为它来自Java世界,是Spring发行的。Spring有一组非常丰富的框架库,这些框架库可以对其进行扩展以支持Web,Windows等。
  2. Castle Windsor是.NET平台中使用最广泛的应用程序之一,并且具有最大的生态系统,具有高度可配置性/可扩展性,具有自定义生命周期管理,AOP支持,固有的NHibernate支持,并且是一个很棒的容器。Windsor是整个堆栈的一部分,其中包括Monorail,Active Record等。NHibernate本身建立在Windsor之上。
  3. Structure Map 通过内部DSL具有非常丰富和精细的配置。
  4. Autofac是新时代的IoC容器,它具有所有固有的功能编程支持。在管理生命周期方面,它也采用了其他方法。Autofac仍然很新,但是它突破了IoC的极限。
  5. Ninject 我听说更多的是裸露的骨头,更少的是更多的方法(听说没有经验)。
  6. 最大的区别Unity是:它来自Microsoft(p&p)并受其支持。Unity具有非常好的性能和完善的文档。它也是高度可配置的。它没有说城堡/结构图的所有优点。

综上所述,这实际上取决于对您而言重要的内容。我会同意其他人的意见,并评估并确定哪一个适合。令人高兴的是,您可以选择多种甜甜圈,而不必只吃一个果冻。


4
Autofac实际上并不是那么新,它比Unity还老:)
Nicholas Blumhardt 2010年

1
我是说它比Unity更新吗?我说这是新时代...即我的意思是它具有功能性。好的,我说的仍然很新,虽然我的意思是,自然而然不是IT是新的。:-)
Glenn Block

2
@Krzysztof-我发现Unity非常简单(至少是在代码中流畅配置时)。你觉得什么痛苦?
TrueWill 2011年


6
这是一个有趣的性能基准:palmmedia.de/Blog/2011/8/30/…–
Steven


18

Ninject很棒。好像真的很快,但是我没有做任何比较。我知道作者Nate在Ninject和其他DI框架之间进行了一些比较,并且正在寻找提高Ninject速度的更多方法。

我听过很多人尊重我说的关于StructureMap和CastleWindsor的好东西。在我看来,这些就是现在要考虑的三大要素。


1
Ninject很流行,但是肯定不是很快。它实际上是最慢的在那里一个:palmmedia.de/Blog/2011/8/30/...
Serj萨根

13

我使用简单注入器

Simple Injector是一个简单,灵活和快速的依赖项注入库,它使用最佳实践来指导您的解决方案迈向成功之路。


4
当心一些人将服务定位器视为反模式,包括曾经使用过一段时间甚至为其编写了库的人:blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
Philippe

4
史蒂文(Steven)还是Simple Injector的创建者...所以这是一个垃圾邮件的答案...尤其是他使用alt帐户这样做时... Simple Injector相当快:palmmedia.de/Blog/2011/
8/30

8

我是城堡的忠实粉丝。我喜欢它在IoC容器之外的其他功能。使用NHibernate,日志记录,AOP等确实非常简单。我还使用Binsor对Boo进行配置,因此真的很喜欢Boo作为一种语言。



5

为了使最简单的Spring.NET示例正常工作,我花了大部分时间都没有成功。永远无法弄清楚如何从XML文件中找到我的程序集。另一方面,在大约2个小时内,我能够使用Ninject,包括测试与NUnit和MSTest的集成。



2

C#的伟大之处在于,它遵循了Java开发人员多年之前所走过的道路。因此,通常来说,在寻找具有这种性质的工具时,我的建议是寻找可靠的Java答案,并查看是否存在.NET改编版。

因此,当涉及到DI(并且有很多选择,这确实是一个品味问题)是Spring.NET。此外,研究项目背后的人员总是明智的。建议使用SourceGear产品进行源代码控制(使用它们之外)没有问题,因为我尊重Eric Sink。我看过马克·波拉克(Mark Pollack)的讲话,我能说什么,这个家伙就明白了。

最后,有很多DI框架,您最好的选择是使用其中一些进行一些示例项目并做出有根据的选择。

祝好运!



2

Spring.Net非常可靠,但是文档花了一些时间来进行研究。Autofac很好,并且虽然支持.Net 2.0,但您需要VS 2008进行编译,或者使用命令行来构建您的应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.