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屏幕也可以在这里找到。
这取决于你在寻找什么,因为他们都有各自的优缺点。
所以总的来说,这取决于什么对你很重要。我同意其他人的看法,去评估,看看哪一个合适。好事情是你有一个不错的选择甜甜圈,而不是只需要一个果冻一个。
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框架,您最好的选择是用其中一些框架做一些示例项目,并做出一个有教育意义的选择。
祝你好运!