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

时间:2020-03-05 18:41:48  来源:igfitidea点击:

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

解决方案

回答

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

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

回答

我过去使用过Spring.NET,并在此方面取得了巨大的成功。我从来没有注意到它有任何实质性的开销,尽管我们使用它的项目本身就相当繁重。阅读文档只花了一点时间就可以完成设置。

回答

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

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

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

祝你好运!

回答

编辑(不是作者):在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.Net和CastleWindsor,但是后面真正的痛苦是我们必须编写的所有讨厌的XML配置!他们现在几乎都以这种方式移动,因此我在过去一年左右的时间里一直在使用StructureMap,并且由于它已使用强类型泛型和注册表移至流畅的配置,因此我在使用IoC时遇到的痛苦障碍已降至零下!现在我知道我的IoC配置是在编译时检查的(大部分情况下),我得到了一个绝对的惊喜,而我对StructureMap及其速度一无所获。我不会说其他的运行时很慢,但是对我来说它们设置起来更加困难,而挫败感常常会赢得胜利。

更新

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

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

回答

Autofac。 https://github.com/autofac/Autofac确实非常快而且非常好。这是进行比较的链接(在Ninject修复内存泄漏问题之后制作)。

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

回答

我认为Ninject是一个不错的起点,它是新的,并且已经考虑到许多微调,而且确实非常快。内特(Nate),开发人员,确实有一个不错的网站和强大的支持。

回答

我可以推荐Ninject。它使用起来非常快捷且易于使用,但是只有在不需要XML配置的情况下,否则我们才应该使用Windsor。

回答

我是城堡的忠实粉丝。我喜欢它在IoC容器故事之外还提供的设施。使用NHibernate,日志记录,AOP等确实非常简单。我还使用Binsor对Boo进行配置,因此真的爱上了Boo作为一种语言。

回答

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

回答

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

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

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

回答

我使用简单注入器:

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