关于C#:哪些.NET依赖注入框架值得研究?

Which .NET Dependency Injection frameworks are worth looking into?

哪些C/.NET依赖注入框架值得研究?关于它们的复杂性和速度,你能说些什么呢?


编辑(非作者):在https://github.com/quozd/awesome-dotnet/blob/master/readme.md ioc上有一个完整的IOC框架列表:

  • Castle Windsor-Castle Windsor是最好的,成熟的控制反转容器,可用于.NET和Silverlight
  • Unity-轻量级可扩展依赖项注入容器,支持构造函数、属性和方法调用注入
  • autofac-一个上瘾的.NET IOC容器
  • DRYIOC-简单、快速的全功能IOC容器。
  • Ninject-.NET依赖注入器的忍者
  • 结构图-用于.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核心应用程序的默认IOC容器。
  • Scrutor-程序集扫描Microsoft.Extensions.DependencyInjection的扩展。
  • vs mef—Visual Studio使用的托管扩展性框架(mef)实现。
  • Tinyioc是一个易于使用、无需麻烦的控制容器,适用于小型项目、库和初学者。

原始答案如下。

我想我在这里可能有点挑剔,但需要注意的是,DI(依赖注入)是一种编程模式,它由IOC(控制反转)框架提供便利,但不需要。IOC框架只是让DI更容易实现,而且它们提供了许多优于DI的其他好处。

尽管如此,我相信这就是你所要求的。关于IOC框架;我以前经常使用Spring.net和Castlewindsor,但后面真正的痛苦是您必须编写的所有烦人的XML配置!它们现在几乎都是这样移动的,所以我在过去一年左右的时间里一直在使用structuremap,而且自从它使用强类型的泛型和注册表移动到一个流畅的配置之后,我使用ioc的痛苦障碍已经降到了零以下!现在我完全不知道我的IOC配置在编译时被检查过(大部分情况下),我对结构图和它的速度只有一点兴趣。我不会说其他人在运行时速度很慢,但他们对我来说更难设置,而挫折感往往会赢得这一天。

更新

我在最近的项目中使用了Ninject,使用它绝对是一种乐趣。这里的话让我有点失望,但(正如我们在英国所说)这个框架是"狗"。我强烈推荐它用于任何你想要快速启动和运行的绿地项目。我从贾斯汀·埃瑟利奇的一组精彩的九个截图中得到了我所需要的一切。我根本看不到在现有代码中重新安装ninject是一个问题,但在我的经验中,对于structuremap也可以这样说。在这两者之间,这将是一个艰难的选择,但我宁愿有竞争而不是停滞,而且有相当数量的健康竞争。

其他的IOC屏幕也可以在这里找到。


这取决于你在寻找什么,因为他们都有各自的优缺点。

  • EDOCX1 0是最成熟的,因为它来自于Java世界的春天。Spring有一套非常丰富的框架库,可以将其扩展到支持Web、Windows等。
  • Castle Windsor是.NET平台中应用最广泛的一个,拥有最大的生态系统,高度可配置/可扩展,具有自定义的寿命管理、AOP支持,具有固有的nhibernate支持,是一个全能的优秀容器。温莎是整个烟囱的一部分,包括单轨铁路、主动记录等。NHibernate本身就建在温莎的顶部。
  • Structure Map通过内部DSL具有非常丰富和细粒度的配置。
  • Autofac是一个新时代的IOC容器,具有所有固有的功能编程支持。它在管理寿命方面也采用了与其他方法不同的方法。autofac仍然是一个非常新的概念,但是它推动了IOC的发展。
  • 我听说江户一〔4〕多是赤骨,少是多方法(听说没有经验)。
  • Unity最大的区别在于:它来自微软(P&P),并得到微软的支持。Unity有很好的性能和很好的文档。它也是高度可配置的。它没有城堡/结构图的所有钟声和哨声。
  • 所以总的来说,这取决于什么对你很重要。我同意其他人的看法,去评估,看看哪一个合适。好事情是你有一个不错的选择甜甜圈,而不是只需要一个果冻一个。


    AutoFac。https://github.com/autofac/autofac这真的很快很好。这里有一个与比较的链接(在Ninject修复内存泄漏问题之后进行)。

    http://www.codingstinct.com/2008/05/ioc-container-benchmark-rerereviewed.html


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

    我听过很多我尊敬的人说关于结构图和Castlewindsor的好话。在我看来,这些是现在要看的三大问题。


    我使用简单的注射器:

    Simple Injector is an easy, flexible and fast dependency injection library that uses best practice to guide your solutions toward the pit of success.


    我是城堡的忠实粉丝。我喜欢它提供的设施,这也超出了国际奥委会集装箱的故事。使用nhibernate、logging、aop等非常简单。我也使用binsor来配置boo,因此我非常喜欢boo作为一种语言。


    我花了一天的大部分时间,在没有成功的情况下努力使最简单的Spring.net示例工作。无法从XML文件中找到程序集。另一方面,在大约2小时内,我能够让Ninject工作,包括测试与Nunit和MSTest的集成。


    我可以推荐Ninject。这是难以置信的快速和易于使用,但只有当您不需要XML配置,否则您应该使用温莎。


    我以前用过Spring.net,并取得了很大的成功。我从来没有注意到它的开销,尽管我们使用它的项目本身就相当沉重。只需花一点时间阅读文档就可以完成设置。


    Spring.net相当可靠,但是文档需要一些时间才能完成。autofac很好,虽然支持.NET 2.0,但您需要vs 2008来编译它,或者使用命令行来构建您的应用程序。


    我认为从Ninject开始是个好地方,它是新的,考虑了很多微调,而且速度非常快。开发人员内特有一个很好的网站和很好的支持。


    C语言的伟大之处在于它遵循了多年前Java开发人员所击败的路径。所以,一般来说,在寻找这种性质的工具时,我的建议是寻找坚实的Java答案,看看是否存在.NET改编。

    所以当涉及到di(有很多选择,这真的是一个品味问题)时,是spring.net。此外,研究项目背后的人总是明智的。我建议使用sourcegear产品进行源代码管理(不使用它们)没有问题,因为我尊重eric sink。我见过马克·波拉克说话,我能说什么呢,那家伙就明白了。

    最后,有很多DI框架,您最好的选择是用其中一些框架做一些示例项目,并做出一个有教育意义的选择。

    祝你好运!