DOTNET CORE源码分析之ServiceDescriptor
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。
DOTNET CORE源码分析之ServiceDescriptor的更多相关文章
- DOTNET CORE源码分析之IOC容器结果获取内容补充
补充一下ServiceProvider的内容 可能上一篇文章DOTNET CORE源码分析之IServiceProvider.ServiceProvider.IServiceProviderEngin ...
- DOTNET CORE源码分析之IServiceProvider、ServiceProvider、IServiceProviderEngine、ServiceProviderEngine和ServiceProviderEngineScope
首先谈一下IServiceProvider IServiceProvider只提供给了一个根据类型获取对象的功能,试想一下IOC总得有一个找到对象,具体如下 public interface ISer ...
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- ASP.NET Core[源码分析篇] - WebHost
_configureServicesDelegates的承接 在[ASP.NET Core[源码分析篇] - Startup]这篇文章中,我们得知了目前为止(UseStartup),所有的动作都是在_ ...
- ASP.NET Core[源码分析篇] - Authentication认证
原文:ASP.NET Core[源码分析篇] - Authentication认证 追本溯源,从使用开始 首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务 ...
- [asp.net core 源码分析] 01 - Session
1.Session文档介绍 毋庸置疑学习.Net core最好的方法之一就是学习微软.Net core的官方文档:https://docs.microsoft.com/zh-cn/aspnet/cor ...
- ASP.NET Core[源码分析篇] - 认证
追本溯源,从使用开始 首先看一下我们的通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务,这里通过JWT的认证方式讲解 public void ConfigureServ ...
- ASP.NET Core[源码分析篇] - Startup
应用启动的重要类 - Startup 在ASP.NET Core - 从Program和Startup开始这篇文章里面,我们知道了Startup这个类的重要性,它主要负责了: 配置应用需要的服务(服务 ...
- EF Core 源码分析
最近在接触DDD+micro service来开发项目,因为EF Core太适合DDD模式需要的ORM设计,所以这篇博客是从代码角度去理解EF core的内部实现,希望大家能从其中学到一些心得体会去更 ...
随机推荐
- win7电脑磁盘文件以分组方式展现解决方案
问题: win7电脑磁盘文件以分组方式展现,具体如下: 解决: 右键磁盘空白处-->分组依据-->选择无:图解如下:
- LG_2869_[USACO07DEC]美食的食草动物Gourmet Grazers
题目描述 Like so many others, the cows have developed very haughty tastes and will no longer graze on ju ...
- get请求直接通过浏览器发请求传数组或者list到后台
原文链接: http://blog.csdn.net/qq_27093465/article/details/76160419 感谢原作者 例如: http://localhost:27001/tes ...
- Ubuntu和window10 安装双系统
先安装window10,然后空出一部分储存空间,我空出来了103G. 然后安装ubuntu分区的时候注意: 刚开始安装的时候:出现安装类型的时候:选择其他选项: 在分区的时候:单击127117(这里是 ...
- 提高你css技能的css开发技巧
好久没整理博客了 进来啰嗦两句 继续抄别人的博客 一.resize实现图片对比 resize的语法如下: resize:none | both | horizontal | vertical 案例 ...
- js对象或数组深复制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- IDEA+Maven+JavaWeb+tomcat项目搭建(图文并茂,详细)
一.创建Maven项目 1:如果刚打开IDEA,显示的是这个页面,我们直接单击 Create New Project(创建项目) 或者 File-> New-> Project 2:选中左 ...
- PHP RabbitMQ 教程(三)
发布/订阅 我们在上一节创建了一个工作队列,并假定队列对应的任务传送给了某个客户端.在这一章节我们会做一些完全不一样的东西–我们会发送一条消息到多个消费者,也称之为"发布/订阅"模 ...
- 乱世兄弟(豹老头 X 天捣臼)
论CP之冷冷冷 只为白凡扫剧- 片源: 乱世兄弟 BGM:兄弟 人物角色: 豹老头 - 白凡 天捣臼 大专栏 乱世兄弟(豹老头 X 天捣臼)- 姚鲁 B站:豹老头 X 天捣臼-MV<乱世兄弟& ...
- textarea 实现高度自动增长
有时候希望textarea 能够自动调整高度来适应输入的内容 网上看到了很多解决方案,比如动态创建一个隐藏的div,当用户输入的时候将textarea的内容绑定到div,由于div的高度会自动撑开,因 ...