c# /。NET依赖注入框架值得一看? 你对它们的复杂性和速度有什么看法?


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

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


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


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

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

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

好运!


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

Castle Windsor - Castle Windsor is best of breed, mature Inversion of Control container available for .NET and Silverlight Unity - Lightweight extensible dependency injection container with support for constructor, property, and method call injection Autofac - An addictive .NET IoC container DryIoc - Simple, fast all fully featured IoC container. Ninject - The ninja of .NET dependency injectors Spring.Net - Spring.NET is an open source application framework that makes building enterprise .NET applications easier Lamar - A fast IoC container heavily optimized for usage within ASP.NET Core and other .NET server side applications. LightInject - A ultra lightweight IoC container Simple Injector - Simple Injector is an easy-to-use Dependency Injection (DI) library for .NET 4+ that supports Silverlight 4+, Windows Phone 8, Windows 8 including Universal apps and Mono. Microsoft.Extensions.DependencyInjection - The default IoC container for ASP.NET Core applications. Scrutor - Assembly scanning extensions for Microsoft.Extensions.DependencyInjection. VS MEF - Managed Extensibility Framework (MEF) implementation used by Visual Studio. TinyIoC - An easy to use, hassle free, Inversion of Control Container for small projects, libraries and beginners alike. Stashbox - A lightweight, fast and portable dependency injection framework for .NET based solutions.

以下是原来的答案。


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

That being said, I'm sure that's what you were asking. About IoC Frameworks; I used to use Spring.Net and CastleWindsor a lot, but the real pain in the behind was all that pesky XML config you had to write! They're pretty much all moving this way now, so I have been using StructureMap for the last year or so, and since it has moved to a fluent config using strongly typed generics and a registry, my pain barrier in using IoC has dropped to below zero! I get an absolute kick out of knowing now that my IoC config is checked at compile-time (for the most part) and I have had nothing but joy with StructureMap and its speed. I won't say that the others were slow at runtime, but they were more difficult for me to setup and frustration often won the day.

更新

I've been using Ninject on my latest project and it has been an absolute pleasure to use. Words fail me a bit here, but (as we say in the UK) this framework is 'the Dogs'. I would highly recommend it for any green fields projects where you want to be up and running quickly. I got all I needed from a fantastic set of Ninject screencasts by Justin Etheredge. I can't see that retro-fitting Ninject into existing code being a problem at all, but then the same could be said of StructureMap in my experience. It'll be a tough choice going forward between those two, but I'd rather have competition than stagnation and there's a decent amount of healthy competition out there.

其他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来编译它,或者使用命令行来构建你的应用程序。


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

Spring.NET is the most mature as it comes out of Spring from the Java world. Spring has a very rich set of framework libraries that extend it to support Web, Windows, etc. Castle Windsor is one of the most widely used in the .NET platform and has the largest ecosystem, is highly configurable / extensible, has custom lifetime management, AOP support, has inherent NHibernate support and is an all around awesome container. Windsor is part of an entire stack which includes Monorail, Active Record, etc. NHibernate itself builds on top of Windsor. Structure Map has very rich and fine grained configuration through an internal DSL. Autofac is an IoC container of the new age with all of it's inherent functional programming support. It also takes a different approach on managing lifetime than the others. Autofac is still very new, but it pushes the bar on what is possible with IoC. Ninject I have heard is more bare bones with a less is more approach (heard not experienced). The biggest discriminator of Unity is: it's from and supported by Microsoft (p&p). Unity has very good performance, and great documentation. It is also highly configurable. It doesn't have all the bells and whistles of say Castle / Structure Map.

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


我使用Simple Injector:

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


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