DryIoc快速,小,全功能的IOC容器,适用于.NET
专为低仪式使用,性能和可扩展性而设计。
目标:net45; netstandard2.0; netstandard2.1; net6.0; net8.0; net9.0
Nuget软件包:
DryIoc .dll
DryIoc (源代码)
DryIoc 。内部(内部公共类型的源代码)
发行说明::以前版本
扩展和同伴
使用CSTOMD创建实时文档
贡献指南
DryIoc的两个原始部分现在是单独的项目:FastExpressionCompiler和Imtools
基准
性能概述
具有工作单位范围和40个依赖关系的对象图4级的现实场景
#44和#26中的更多详细信息。
列出的.MSDI软件包是分别的Microsoft.extensions.ipendentencyIndoction适配器
冷启动 - 注册服务,然后首次打开范围并解决根范围范围的服务(例如控制器)
DryIoc 6.0.0(.msdi 8.0.0),MSDI 9.0.0,Grace 7.2.1(.msdi 7.1.0),AutoFac 8.1.1(.msdi 10.0.0.0.0.0.0),Lamar 14.0.1
BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4391/23H2/2023Update/SunValley3)
Intel Core i9-8950HK CPU 2.90GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET SDK 9.0.100
[ Host ] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Gen1 | Gen2 | Allocated | Alloc Ratio |
| ------------ | -----------: | ---------: | ---------: | -----------: | -----: | ------: | -------: | ------: | ------: | --------: | ----------: |
| DryIoc | 65.70 us | 1.309 us | 2.553 us | 64.46 us | 1.00 | 0.05 | 5.2490 | 0.4883 | - | 32.74 KB | 1.00 |
| DryIoc _MsDI | 97.96 us | 1.959 us | 4.382 us | 96.59 us | 1.49 | 0.09 | 6.5918 | 0.6104 | - | 40.89 KB | 1.25 |
| MsDI | 81.25 us | 1.624 us | 4.686 us | 82.73 us | 1.24 | 0.08 | 14.8926 | - | - | 91.15 KB | 2.78 |
| Autofac | 323.50 us | 6.408 us | 8.555 us | 320.06 us | 4.93 | 0.23 | 49.8047 | - | - | 306.93 KB | 9.37 |
| Autofac_MsDI | 367.96 us | 7.324 us | 14.111 us | 362.58 us | 5.61 | 0.30 | 59.0820 | - | - | 364.77 KB | 11.14 |
| Lamar_MsDI | 3,643.30 us | 56.678 us | 55.666 us | 3,630.33 us | 55.53 | 2.25 | 82.0313 | 3.9063 | - | 524.96 KB | 16.03 |
| Grace | 13,870.26 us | 282.593 us | 824.337 us | 13,837.66 us | 211.41 | 14.82 | 109.3750 | 93.7500 | 15.6250 | 686.94 KB | 20.98 |
| Grace_MsDI | 17,079.41 us | 318.034 us | 326.598 us | 17,025.77 us | 260.33 | 10.92 | 125.0000 | 93.7500 | - | 854.11 KB | 26.09 |
比较较旧的版本
DryIoc 5.0.0(.msdi 6.0.0),MSDI 6.0.0,Grace 7.2.1(.msdi 7.1.0),AutoFac 6.3.0(.msdi 7.2.0),Lamar 8.0.1
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19043
Intel Core i9-8950HK CPU 2.90GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=6.0.201
[ Host ] : .NET Core 6.0.3 (CoreCLR 6.0.322.12309, CoreFX 6.0.322.12309), X64 RyuJIT
DefaultJob : .NET Core 6.0.3 (CoreCLR 6.0.322.12309, CoreFX 6.0.322.12309), X64 RyuJIT
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
| ------------ | -----------: | ---------: | ---------: | -----: | ------: | -------: | ------: | -----: | --------: |
| DryIoc | 82.22 us | 1.209 us | 1.072 us | 1.00 | 0.00 | 6.3477 | 0.3662 | - | 39.42 KB |
| DryIoc _MsDI | 94.18 us | 1.207 us | 1.070 us | 1.15 | 0.02 | 8.0566 | 0.6104 | - | 49.87 KB |
| MsDI | 94.60 us | 0.715 us | 0.597 us | 1.15 | 0.01 | 11.8408 | 4.2725 | - | 72.59 KB |
| Autofac | 543.45 us | 4.570 us | 3.568 us | 6.60 | 0.10 | 51.7578 | 25.3906 | 1.9531 | 317.19 KB |
| Autofac_MsDI | 534.64 us | 5.919 us | 5.247 us | 6.50 | 0.10 | 54.6875 | 27.3438 | 1.9531 | 340.17 KB |
| Lamar_MsDI | 7,053.46 us | 140.273 us | 402.469 us | 77.97 | 2.84 | - | - | - | 649.68 KB |
| Grace | 15,990.58 us | 123.798 us | 109.744 us | 194.52 | 2.21 | 93.7500 | 31.2500 | - | 736.12 KB |
| Grace_MsDI | 18,884.30 us | 321.388 us | 268.373 us | 229.50 | 4.25 | 125.0000 | 62.5000 | - | 904.7 KB | 热门运行 - 打开示波器并在第n次解决根源范围的服务
DryIoc 6.0.0(.msdi 8.0.0),MSDI 9.0.0,Grace 7.2.1(.msdi 7.1.0),AutoFac 8.1.1(.msdi 10.0.0.0.0.0.0),Lamar 14.0.1
BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4391/23H2/2023Update/SunValley3)
Intel Core i9-8950HK CPU 2.90GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET SDK 9.0.100
[ Host ] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Gen1 | Allocated | Alloc Ratio |
| ------------ | --------: | --------: | --------: | ----: | ------: | ------: | -----: | --------: | ----------: |
| DryIoc | 1.357 us | 0.0105 us | 0.0093 us | 1.00 | 0.01 | 0.4730 | 0.0038 | 2.91 KB | 1.00 |
| DryIoc _MsDI | 1.815 us | 0.0126 us | 0.0118 us | 1.34 | 0.01 | 0.5074 | 0.0038 | 3.11 KB | 1.07 |
| MsDI | 2.800 us | 0.0146 us | 0.0114 us | 2.06 | 0.02 | 0.7896 | 0.0114 | 4.85 KB | 1.67 |
| Grace | 1.535 us | 0.0125 us | 0.0117 us | 1.13 | 0.01 | 0.5169 | 0.0038 | 3.17 KB | 1.09 |
| Grace_MsDI | 1.709 us | 0.0249 us | 0.0256 us | 1.26 | 0.02 | 0.5493 | 0.0038 | 3.37 KB | 1.16 |
| Lamar_MsDI | 5.314 us | 0.0197 us | 0.0184 us | 3.92 | 0.03 | 0.9689 | 0.9613 | 5.95 KB | 2.05 |
| Autofac | 36.715 us | 0.2231 us | 0.1863 us | 27.06 | 0.22 | 7.2021 | 0.4883 | 44.49 KB | 15.31 |
| Autofac_MsDI | 48.139 us | 0.6987 us | 0.6194 us | 35.48 | 0.50 | 10.1318 | 0.6714 | 62.27 KB | 21.42 |比较较旧的版本
DryIoc 5.0.0(.msdi 6.0.0),MSDI 6.0.0,Grace 7.2.1(.msdi 7.1.0),AutoFac 6.3.0(.msdi 7.2.0),Lamar 8.0.1
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19043
Intel Core i9-8950HK CPU 2.90GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=6.0.201
[ Host ] : .NET Core 6.0.3 (CoreCLR 6.0.322.12309, CoreFX 6.0.322.12309), X64 RyuJIT
DefaultJob : .NET Core 6.0.3 (CoreCLR 6.0.322.12309, CoreFX 6.0.322.12309), X64 RyuJIT
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated |
| ------------ | --------: | --------: | --------: | ----: | ------: | ------: | -----: | ----: | --------: |
| DryIoc | 1.535 us | 0.0143 us | 0.0111 us | 1.00 | 0.00 | 0.4749 | 0.0076 | - | 2.91 KB |
| DryIoc _MsDI | 2.405 us | 0.0277 us | 0.0246 us | 1.57 | 0.02 | 0.4807 | 0.0076 | - | 2.96 KB |
| MsDI | 3.655 us | 0.0726 us | 0.0807 us | 2.40 | 0.05 | 0.7629 | 0.0114 | - | 4.68 KB |
| Grace | 1.807 us | 0.0241 us | 0.0213 us | 1.18 | 0.02 | 0.5169 | 0.0076 | - | 3.17 KB |
| Grace_MsDI | 2.576 us | 0.0421 us | 0.0394 us | 1.68 | 0.03 | 0.5569 | 0.0076 | - | 3.41 KB |
| Lamar_MsDI | 6.673 us | 0.0876 us | 0.0732 us | 4.35 | 0.06 | 0.9995 | 0.4959 | - | 6.16 KB |
| Autofac | 47.040 us | 0.7367 us | 0.6531 us | 30.65 | 0.48 | 7.7515 | 0.6104 | - | 47.73 KB |
| Autofac_MsDI | 59.566 us | 0.8734 us | 0.7742 us | 38.76 | 0.61 | 11.3525 | 0.9155 | - | 69.59 KB | 可靠性
- 超过2000个测试用例涵盖了。
- 线程安全和无锁的注册和决议。
- 检测对象图中的递归依赖性(周期)。
- 尽早提供很多细节。
- 通过container.validate()为潜在分辨率问题提供诊断。
特征
不完整的功能列表
- 对实施类型映射的服务注册(另外支持:注册一次,注册替换,删除注册)。
- 委托工厂的注册并已经创建了服务实例。
- 从提供的组件中的类型注册。
- 注册用任意类型的服务密钥和单个服务的多个非钥匙实现的注册。
- 根据上下文的条件注册。
- 注册了相关的任意类型的元数据对象。
- 解决和分辨。
- 通过重复使用和终生范围的服务寿命控制:
- 带有可选名称的嵌套一次性示波器
- 可选的环境范围上下文
- 重复使用类型:瞬态,单胎,以多种口味范围范围,包括对象图中的特定服务祖先的范围
- 使用parrentReuse和usedEcoreTreereUse(用于装饰器)的选项
- 预防疾病和弱参考的选项
- 开放式支持,包括类型约束,方差,复杂的嵌套和重复定义。
- 构造函数参数注入和可选属性和现场注入。
- 参数注入的静态和实例工厂方法类似于构造函数参数注入。
- 将属性和字段注入现有对象。
- 装饰工:
- 嵌套有相对顺序控制
- 通用和非生成
- 重复使用可能与装饰服务不同
- 包装器的装饰师
- 包装纸:
- 服务收集:t [],iEnumerable
,LazyEnumerable 和i(readonly)收集|列表 - 单个服务包装器:懒惰
,func ,meta 或元组 ,keyvaluepair - 用func
,func 等的构造函数或工厂方法参数的咖喱 - 嵌套包装纸:例如元组
> [] - 用户定义的包装纸
- 合成的
- 服务收集:t [],iEnumerable
- 用户提供的解决未知服务的策略。
- 动态注册提供商
- 可选的自动混凝土类型分辨率
分辨率选项
DryIoc通过表达汇编和解释实现服务分辨率和注入。解释是没有系统的目标平台的唯一选项。反射。像Xamarin IOS一样。检查分辨率管道文档以获取更多详细信息。
Freepik从www.flaticon.com制作的图标由CC 3.0许可
通过命令行克隆项目: