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的内部实现,希望大家能从其中学到一些心得体会去更 ...
随机推荐
- SSL_CTX结构体
/* 定义在ssl.h头文件中 */struct ssl_ctx_st { SSL_METHOD *method; unsigned long options; unsigned long mode; ...
- Rancher的部署安装(编排选用K8S)
为什么要使用Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台.Rancher提供了在生产环境中使用的管理Do ...
- <JZOJ5938>分离计划
emm骚操作 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm ...
- React Native 学习笔记--进阶(二)--动画
React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...
- IBM Developer:Java 9 新特性概述
Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...
- linux lsof常用方法
lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具,在linux环境下,任何事物都是以文件形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.系统 ...
- Golang/Python/PHP带你彻底学会gRPC
目录 一.gRPC是什么? 二.Protocol Buffers是什么? 三.需求:开发健身房服务 四.最佳实践 Golang 1. 安装protoc工具 2. 安装protoc-gen-go 3. ...
- property 属性
#propery 属性"""内置装饰器函数,只在面向对象中使用."""#计算圆的面积,圆的周长 from math import pi cl ...
- Python第一周基本语句学习整理
目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ...
- SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...