ServiceDescriptor在.net core中的作用就是DI中注入服务元素的描述。每一个元素核心内容部分包括需要注入的服务元素的类型ServiceType,它对应的接口(如果有的话)ImplementationType,以及服务元素的生命周期ServiceLifetime。

  源码中ServiceDescriptor是一个普通类,一共有4个构造函数,分别是如下:

public ServiceDescriptor(Type serviceType, Type implementationType, ServiceLifetime lifetime): this(serviceType, lifetime)

需要带入服务元素的类型,服务元素对应接口的类型,服务元素的生命周期。

public ServiceDescriptor(Type serviceType, object instance): this(serviceType, ServiceLifetime.Singleton)

需要带入服务元素的类型,服务元素实例,默认是单例的。

public ServiceDescriptor(Type serviceType, Func<IServiceProvider, object> factory, ServiceLifetime lifetime): this(serviceType, lifetime)

需要带入服务元素的类型,服务工厂(用于生成服务实例),服务元素的生命周期。  

private ServiceDescriptor(Type serviceType, ServiceLifetime lifetime)

需要带入服务元素的类型,服务元素的生命周期,这个是最基本的构造函数,但是没有赋予实例对象,所以不公开,不然就不知道这个服务的真实值是什么了,也就没有注入的意义了。

  ServiceDescriptor中有几个很重要的函数,下面我简单介绍一下:

  第一个:Describe函数,用于生成ServiceDescriptor类,一共有3个重载,分别是如下:

public static ServiceDescriptor Describe(Type serviceType,Func<IServiceProvider, object> implementationFactory,ServiceLifetime lifetime)

public static ServiceDescriptor Describe(Type serviceType,Type implementationType,ServiceLifetime lifetime)

private static ServiceDescriptor Describe<TService, TImplementation>(ServiceLifetime lifetime)

public static ServiceDescriptor Singleton(Type serviceType,object implementationInstance)

它们分别对应上面的构造函数,也就是说为实例化ServiceDescriptor提供另外一种方式

  第二个:Singleton函数,用于生成单例化的ServiceDescriptor类,重载方式不另外说明。

  第三个:Scoped函数,用于生成服务范围内的ServiceDescriptor类,重载方式不另外说明。

  第四个:Transient函数,用于生成每次不同的ServiceDescriptor类,重载方式不另外说明。

  另外,ServiceLifetime 是一个枚举类型,枚举内容有Singleton,Scoped,Transient。

  

最新文章

  1. [转]&#39;&#39;\\=DevExpress 中 汉化包 汉化方法
  2. php json与xml序列化/反序列化
  3. android 实现ImageView按压效果和解决背景图片拉申问题
  4. 到程序集里取DLL
  5. 搬家至个人独立博客virson.cn
  6. GNU PGM
  7. Activity进入与退出的动画
  8. weex里Vuex state使用storage持久化
  9. hdu1281二分图匹配
  10. 网络推广 免费推广产品网站 B2B网站如何推广
  11. Cortext-A7_i.MX 6ULL——多模式DDR控制器(MMDC)
  12. Vue混合mixins
  13. linux+jenkins+jmeter+ant持续集成
  14. 3ds max学习笔记(二)--查看视点
  15. checkbox多选按钮变成单选
  16. C# 控件
  17. post异步请求
  18. [笔记] Fiddler 抓包工具的使用
  19. 第二章 JVM内存分配
  20. java web中读取properties文件时的路径问题

热门文章

  1. 搭建harbor企业级私有registry
  2. labview的bool(布尔)按键机械属性
  3. 吴裕雄--天生自然python学习笔记:Python3 输入和输出
  4. 第二类Stirling数推导
  5. 微软亚洲研究院开源图数据库GraphView
  6. 软件测试价值观-SMBT新理念
  7. Spring源码阅读笔记03:xml配置读取
  8. wepack环境配置1之node的安装
  9. Spring Cloud Feign 组成和配置
  10. 分布式系统一致性问题与Raft算法(下)