.Net Core依赖注入添加的每个服务,最终都会转换为一个ServiceDescriptor的实例,ServiceDescriptor包含以下属性:

Lifetime:服务的生命周期(Singleton:单例,Scoped:单个请求期间,Transient:暂时的,每次都创建一个实例)

ServiceType:服务类型

ImplementationType:服务的实现类型

ImplementationInstance:实现类型的实例

TryAddEnumerable和TryAddTransient都是用于添加服务,他们的却别就在于过滤条件不同

TryAddEnumerable在添加时会根据服务的ServiceType和ImplementationType进行判断,如果已存在对应的服务则不添加,适用于为同一个服务添加多个不同的实现的场景,源代码如下:

if (!services.Any(d =>
d.ServiceType == descriptor.ServiceType &&
d.GetImplementationType() == implementationType))
{
services.Add(descriptor);
}

TryAddTransient在添加时只根据服务的ServiceType进行判断,如果已存在该类型的服务,则不添加,该方法适用于同一个服务已存在的服务不在添加的场景,源代码如下:

            if (!collection.Any(d => d.ServiceType == descriptor.ServiceType))
{
collection.Add(descriptor);
}

最新文章

  1. SPS中使用JSOM发邮件
  2. HDU 5802 Windows 10
  3. LTE Module User Documentation(翻译7)——无线环境地图(REM)、AMC 模型 和 CQI 计算
  4. HDU 1269:迷宫城堡(强连通)
  5. 用sql语句生成 数据字典
  6. iOS CoreAnimation剖析
  7. windows store app search contract
  8. (转载)mysql_query( )返回值
  9. javascript 高级程序设计(三)-数据类型
  10. C#中类的属性
  11. xpath的文本获取
  12. 大数据除法(Large data division)
  13. My Demos
  14. 2160 母猪的故事 ACM 数学规律
  15. STM8
  16. grep如何进行正则表达式查找
  17. MySQL 联合索引测试
  18. [转]如何配置Log4Net使用Oracle数据库记录日志
  19. delphi ScriptGate 调用JS
  20. go包管理工具glide使用方法

热门文章

  1. 查看java版本
  2. 集合之ArrayList,HashSet,HashMap
  3. leecode-39. Combination Sum
  4. T-SQL查询处理执行顺序(一)
  5. 洛谷P1781 宇宙总统
  6. linux创建文件的四种方式(其实是两种,强行4种)
  7. mongodb的投影
  8. 一、单例模式(Singleton)
  9. <img/>标签属性
  10. linux 查看dd进度