哪个C#/.NET依赖注入框架值得研究吗?

推荐答案

edit(不是作者提供的):在https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc上有一个完整的IOC框架列表:

  • Castle Windsor城堡Windsor是最好的、成熟的控制反转容器,可用于.NET和Silverlight
  • Unity-轻量级可扩展依赖项注入容器,支持构造函数、属性和方法调用注入
  • Autofac-让人上瘾.NET IoC容器
  • DryIoc-简单、快速、功能齐全的IoC容器.
  • Ninject年的今天,日本的忍者.净依赖关系
  • Spring.Net年的春天.NET是一个开源的应用程序框架,它可以帮助构建企业级应用程序.NET应用程序更简单
  • Lamar-一个快速的IoC容器,针对ASP内的使用进行了大量优化.NET Core和其他.NET服务器端应用程序.
  • LightInject-超轻的IoC容器
  • Simple Injector-Simple Injector是一个易于使用的依赖项注入(DI)库.NET 4+支持Silverlight 4+、Windows Phone 8、Windows 8,包括通用应用程序和Mono.
  • Microsoft.Extensions.DependencyInjection-ASP的默认IoC容器.NET核心应用程序.
  • Scrutor-微软的组件扫描扩展.扩展.依赖性注射.
  • VS MEF-VisualStudio使用的托管可扩展性框架(MEF)实现.
  • 一个易于使用、无麻烦、控制反转的容器,适用于小项目、图书馆和初学者.
  • Stashbox-一个轻量级的、快速的、可移植的依赖注入框架.基于NET的解决方案.

最初的答案如下.


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

话虽如此,我相信你是这么问的.关于国际奥委会框架;我以前经常使用Spring.NetCastleWindsor,但真正的问题是你必须编写那些讨厌的XML配置!他们现在几乎都是这样发展的,所以我在过go 一年左右一直在使用StructureMap,因为它已经转移到使用强类型泛型和注册表的流畅配置,我使用IoC的痛苦障碍已经降到了零以下!现在知道我的IoC配置在编译时被判断(大部分情况下),我感到非常高兴,我对StructureMap及其速度非常满意.我不会说其他人在运行时很慢,但他们对我来说更难设置,而且沮丧往往会赢得这一天.

Update

我在我的最新项目中使用了Ninject,使用它绝对是一种乐趣.在这里,我有点语无伦次,但(正如我们在英国所说的)这个框架就是"狗".我强烈推荐任何你想快速启动和运行的绿地项目.我从Justin Ethernedge的fantastic set of Ninject screencasts中得到了我所需要的一切.我看不出将Ninject重新安装到现有代码中是一个问题,但根据我的经验,StructureMap也是这样.这将是一个艰难的 Select ,在这两者之间前进,但我宁愿有竞争,而不是停滞,还有相当数量的健康竞争.

国际奥委会的其他截屏视频也可以找到here on Dimecasts个.

.net相关问答推荐

尽管有`disable`注释,但未 suppress Pylint语法错误

创建仅包含msBuild.Target的Nuget包

使用托管身份而不是检测密钥配置Application Insights

从 Contentful 中的富文本元素中获取价值?

Npgsql Minimum Pool Size 似乎没有被考虑在内

NET 6:控制器方法不可访问

如何为多种文件类型设置 FileSystemWatcher 过滤器?

.gitignore 和 Visual Studio 项目:忽略 bin/Debug 目录但不忽略 bin/Release 目录

log4net 与 TraceSource

如何以编程方式判断类型是 struct 还是类?

为什么要判断这个!= null?

如何将 NuGet 与 Visual C# Express 一起使用?

SQLParameter 如何防止 SQL 注入?

多个添加的实体可能具有相同的主键

有没有办法从方法返回匿名类型?

使用 C# 设置全局热键

CI服务器的比较?

是否可以在 XP 上运行 .NET 4.5 应用程序?

如何从 HashSet 中检索实际项目?

如何重新启动我的 C# WinForm 应用程序?