哪些.NET依赖注入框架值得研究?

时间:2008-08-21 21:56:23

标签: c# .net dependency-injection inversion-of-control

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

12 个答案:

答案 0 :(得分:325)

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

  • Castle Windsor - 温莎城堡是最好的,成熟的反转控制容器可用于.NET和Silverlight
  • Unity - 支持构造函数,属性和方法调用注入的轻量级可扩展依赖注入容器
  • Autofac - 令人上瘾的.NET IoC容器
  • DryIoc - 简单,快速的全功能IoC容器。
  • Ninject - .NET依赖注入器的忍者
  • StructureMap - .Net的原始IoC / DI容器
  • Spring.Net - Spring.NET是一个开源应用程序框架,可以更轻松地构建企业.NET应用程序
  • LightInject - 超轻量级IoC容器
  • Simple Injector - Simple Injector是一个易于使用的.NET 4+依赖注入(DI)库,支持Silverlight 4 +,Windows Phone 8,Windows 8,包括通用应用程序和Mono。
  • Microsoft.Extensions.DependencyInjection - ASP.NET核心应用程序的默认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的fantastic set of Ninject screencasts得到了所有我需要的东西。我无法看到Ninject复制到现有代码根本就是一个问题,但在我的经验中可以说StructureMap也是如此。在这两者之间展开这将是一个艰难的选择,但我宁愿竞争而不是停滞不前,并且那里有相当数量的健康竞争。

其他IoC截屏视频也可以找到here on Dimecasts

答案 1 :(得分: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 的最大区别者是:它来自微软(p& p)并得到其支持。 Unity具有非常好的性能和出色的文档。它也是高度可配置的。它没有像Castle / Structure Map那样的所有花里胡哨的东西。
  7. 总而言之,这实际上取决于对您来说重要的事情。我会同意其他人一起去评估和看哪一个适合。好的是你有一个很好的甜甜圈选择,而不仅仅是一个果冻。

答案 2 :(得分:35)

Autofac。 https://github.com/autofac/Autofac这真的很快,非常好。这是一个比较链接(在Ninject修复内存泄漏问题后制作)。

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html

答案 3 :(得分:18)

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

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

答案 4 :(得分:11)

我使用Simple Injector

  

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

答案 5 :(得分:8)

我是Castle的忠实粉丝。我喜欢它在IoC Container故事之外提供的设施。它真的很简单,使用NHibernate,日志记录,AOP等。我也使用Binsor来配置Boo并且因为它而真的爱上了Boo作为一种语言。

答案 6 :(得分:5)

我可以推荐Ninject。它非常快速且易于使用,但仅当您不需要XML配置时,否则您应该使用Windsor。

答案 7 :(得分:5)

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

答案 8 :(得分:4)

我过去曾使用过Spring.NET,并且取得了很大的成功。我从来没有注意到它有任何实质性的开销,尽管我们使用它的项目本身相当沉重。只花了一点时间阅读documentation来设置它。

答案 9 :(得分:2)

关于C#的好处在于,它遵循的是多年前Java开发人员击败它的路径。因此,一般来说,在寻找这种性质的工具时,我的建议是寻找可靠的Java答案,看看是否存在.NET改编。

因此,当涉及到DI(并且有很多选择,这真的是一个品味问题)是Spring.NET。此外,研究项目背后的人总是明智的。我没有建议SourceGear产品用于源代码控制(使用它们之外),因为我尊重Eric Sink。我见过马克波拉克说话,我能说些什么,这个家伙才能得到它。

最后,有很多DI框架,你最好的选择是做一些示例项目,并做一些有根据的选择。

祝你好运!

答案 10 :(得分:2)

我认为一个好的起点是Ninject,它是新的并且考虑了很多微调并且非常快。 Nate,开发人员,真的有一个很棒的网站和很好的支持。

答案 11 :(得分:2)

Spring.Net非常可靠,但文档需要花费一些时间才能完成。 Autofac很好,虽然支持.Net 2.0,但您需要VS 2008来编译它,否则使用命令行来构建您的应用程序。