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
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 |
\”>
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
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 |\”>
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
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 |\”>
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
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 |\”>
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 <t>,LazyEnumerable <t>和i(readonly)收集|列表<t>
- 单个服务包装器:懒惰<t>,func <t>,meta <tmetadata,t>或元组<tmetadata,t>,keyvaluepair <tkey,t>
- 用func <targ,t>,func <targ1,targ2,t>等的构造函数或工厂方法参数的咖喱
- 嵌套包装纸:例如元组<somemetadata,func <isomeservice >> []
- 用户定义的包装纸
- 合成的
- 用户提供的解决未知服务的策略。
- 动态注册提供商
- 可选的自动混凝土类型分辨率
分辨率选项
DryIoc通过表达汇编和解释实现服务分辨率和注入。解释是没有系统的目标平台的唯一选项。反射。像Xamarin IOS一样。检查分辨率管道文档以获取更多详细信息。
Freepik从www.flaticon.com制作的图标由CC 3.0许可
