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

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

回答(12)

3 years ago

edit (不是作者):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容器

  • Simple Injector - Simple Injector是一个易于使用的.NET 4依赖注入(DI)库,支持Silverlight 4,Windows Phone 8,Windows 8,包括Universal应用程序和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及其速度感到高兴 . 我不会说其他人在运行时速度很慢,但是对我来说设置起来比较困难,而且经常赢得挫败感 .

Update

我一直在使用Ninject进行我的最新项目,并且使用起来非常愉快 . 单词在这里让我失望了,但是(正如我们在英国所说)这个框架是'the Dogs' . 我强烈建议您在任何想要快速启动和运行的绿色领域项目中使用它 . 我从Justin Etheredge的一个fantastic set of Ninject screencasts得到了所有我需要的东西 . 我看不出复古Ninject对现有代码的影响根本就是问题,但是根据我的经验,我可以说_766199 . 它宁愿竞争而不是停滞不前,那里有相当数量的 Health 竞争 .

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

3 years ago

这取决于你在寻找什么,因为它们各有利弊 .

  • Spring.NET 是最成熟的,因为它来自Java世界的Spring . Spring有一组非常丰富的框架库,可以扩展它以支持Web,Windows等 .

  • Castle Windsor 是.NET平台中使用最广泛的一个,拥有最大的生态系统,高度可配置/可扩展,具有自定义生命周期管理,AOP支持,具有固有的NHibernate支持,并且是一个非常棒的容器 . Windsor是整个堆栈的一部分,包括Monorail,Active Record等.NHibernate本身 Build 在Windsor之上 .

  • Structure Map 通过内部DSL具有非常丰富和细粒度的配置 .

  • Autofac 是新时代的IoC容器,具有所有固有的函数编程支持 . 管理生命周期的方法也不同于其他方法 . Autofac仍然很新,但它推动了IoC的可能性 .

  • Ninject 我听说过更多的方法(听说没有经历过) .

  • Unity 的最大鉴别者是:它拥有所谓的城堡/结构 Map 的所有钟声和口哨声 .

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

3 years ago

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

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

3 years ago

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

我听说很多我尊重的人说了关于StructureMap和CastleWindsor的好东西 . 在我看来,这些是现在看到的三巨头 .

3 years ago

我用Simple Injector

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

3 years ago

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

3 years ago

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

3 years ago

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

3 years ago

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

3 years ago

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

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

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

祝好运!

3 years ago

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

3 years ago

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