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

pbr*_*ult 375 .net c# dependency-injection inversion-of-control

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

Rob*_*rey 331

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

  • 温莎城堡 - 温莎城堡是最好的,成熟的反转控制容器可用于.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,包括Universal应用程序和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上找到.

  • 不错但是要公平 - 温莎现在也有一个非常好的完全流畅的界面. (7认同)
  • 我读过一些资料,说 Ninject 是最慢的 http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison 和 http://stackoverflow.com/问题/4581791/how-do-the-major-c-sharp-di-ioc-frameworks-compare# (2认同)

Gle*_*ock 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具有非常好的性能和出色的文档.它也是高度可配置的.它没有说城堡/结构地图的所有花里胡哨的东西.

总而言之,它实际上取决于对您来说重要的事情.我会同意其他人一起去评估和看哪一个适合.好的是你有一个很好的甜甜圈选择,而不仅仅是一个果冻.

  • 这是一个有趣的性能基准:http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison (6认同)
  • Autofac实际上并不是那么新,它比Unity更旧:) (4认同)
  • @Krzysztof - 我发现Unity很容易(至少在代码中流利配置时).你觉得什么痛苦? (2认同)

Pet*_*ete 35

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

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


Sco*_*oon 18

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

我听说很多我尊敬的人都对StructureMap和CastleWindsor说了些好话.在我看来,这些是现在看到的三巨头.


小智 13

我使用Simple Injector:

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

  • 请注意一些人认为服务定位器是反模式的,包括使用它一段时间的人,甚至为它编写了一个库:http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/ (4认同)
  • Steven也是Simple Injector的创造者...所以这是一个垃圾回答...尤其是他使用alt帐户来做...简单的Injector虽然很快:http://www.palmmedia.德/博客/ 2011/8/30/IOC-容器基准性能对比 (4认同)

Chr*_*nal 8

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


Jul*_*sar 5

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

  • https://www.akshaysura.com/2016/08/31/ioc-container-benchmark-comparison-2016-including-microsoft-extensions-dependencyinjection/ (3认同)

小智 5

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