哪些.NET依赖注入框架值得一看?

c# / < p >。NET依赖注入框架值得一看? 关于它们的复杂性和速度,你能说些什么
169631 次浏览

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

我听很多我尊敬的人说过StructureMap和CastleWindsor的优点。在我看来,这是目前最值得关注的三大问题。

我在过去使用过春天。网,并取得了巨大的成功。我从未注意到它有任何实质性的开销,尽管我们使用它的项目本身相当繁重。它只花了一点时间读取文档来设置它。

c#的伟大之处在于,它遵循了多年来Java开发人员所走过的道路。所以,我的建议是,一般来说,在寻找这种性质的工具时,寻找可靠的Java答案,看看是否存在。net的改编。

所以当涉及到DI时(有很多选项,这真的是一个品味的问题)是春天。网。此外,研究项目背后的人总是明智的。我建议使用SourceGear产品进行源代码控制(在使用它们之外),因为我尊重Eric Sink。我看过马克·波拉克的演讲,我能说什么呢,他就是懂。

最后,有很多依赖注入框架,您最好的选择是使用其中的一些做一些示例项目,并做出明智的选择。

好运!

编辑(不是作者提供的):在https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc中有一个IoC框架的全面列表:

  • 温莎城堡 - Castle Windsor是最好的,成熟的反转控制容器,可用于.NET和Silverlight
  • 团结 -轻量级可扩展依赖注入容器,支持构造函数、属性和方法调用注入
  • Autofac -一个令人上瘾的。net IoC容器
  • DryIoc -简单,快速的全功能IoC容器。
  • Ninject - .NET依赖注入器的忍者
  • 春天。网 -春天。NET是一个开源的应用程序框架,它使得构建企业。NET应用程序更加容易
  • 拉马尔 -一个快速IoC容器,为在ASP中使用进行了大量优化。NET Core和其他。NET服务器端应用程序。
  • LightInject -一个超轻量级IoC容器
  • 简单的注射器 - Simple Injector是一个易于使用的依赖注入(DI)库,用于。net 4+,支持Silverlight 4+, Windows Phone 8, Windows 8(包括通用应用程序和Mono)。
  • Microsoft.Extensions.DependencyInjection - ASP的默认IoC容器。NET核心应用程序。
  • Scrutor -为Microsoft.Extensions.DependencyInjection组装扫描扩展。
  • VS MEF - Visual Studio使用的托管可扩展性框架(MEF)实现。
  • TinyIoC -一个易于使用,无麻烦,反转控制容器的小项目,库和初学者一样。
  • Stashbox -一个轻量级、快速、可移植的依赖注入框架,用于基于。net的解决方案。

以下是原来的答案。


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

话虽如此,我相信这就是你想问的。关于IoC框架;我过去经常使用春天。网CastleWindsor,但真正的麻烦是你必须编写的所有讨厌的XML配置!它们现在几乎都在朝着这个方向发展,所以我在过去的一年左右一直在使用StructureMap,并且由于它已经转移到使用强类型泛型和注册表的流畅配置,我在使用IoC时的痛苦障碍已经降到了零以下!现在我知道我的IoC配置是在编译时检查的(大部分),我对StructureMap和它的速度除了快乐什么都没有。我不会说其他的在运行时很慢,但是它们的设置对我来说更加困难,而且经常让人沮丧。

更新

我一直在我的最新项目中使用Ninject,使用它是一种绝对的乐趣。我在这里有点不知道该怎么说,但是(就像我们在英国说的)这个框架就是“狗”。我强烈推荐它用于任何你想要快速启动和运行的绿地项目。我得到了所有我需要的奇妙的Ninject截屏集由Justin Etheredge。我看不出将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这门语言。

春天。Net是非常可靠的,但是文档花了一些时间。Autofac很好,虽然支持。net 2.0,但你需要VS 2008来编译它,或者使用命令行来构建你的应用程序。

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

  1. Spring.NET是最成熟的,因为它来自Spring,来自Java世界。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拥有非常出色的性能和出色的文档。它也是高度可配置的。它不具备城堡/结构地图的所有功能。

总之,这取决于什么对你来说是重要的。我同意其他人的看法,去评估,看看哪一个合适。好处是你有很多甜甜圈可以选择,而不仅仅是果冻甜甜圈。

我使用简单的注射器:

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

我花了大半天的时间苦苦挣扎,只为得到最简单的泉水。NET实例工作。永远不知道如何让它从XML文件中找到我的程序集。另一方面,在大约2小时内,我能够让Ninject工作,包括测试与NUnit和MSTest的集成。