Asp.Net Core 第04局:依赖注入
总目录
前言
本文介绍Asp.Net Core中默认的依赖注入(DI)模式。
环境
1.Visual Studio 2017
2.Asp.Net Core 2.2
开局
第一手:依赖注入说明
1.一个例子
主机和主机中硬盘,可以说主机中硬盘是主机的依赖项,若更换硬盘,需拆主机。
若将硬盘通过USB接口外接,那么只需将新硬盘接入USB口即可。
2.例子代码

3.控制反转(IoC)


控制反转:将依赖交给第三方容器管理。
控制反转与依赖注入的关系:控制反转是一种思想,依赖注入是控制反转的一种实现。
4.依赖注入(DI)
现在再回到Startup中看看Asp.Net Core中的依赖注入。

1.代码中这些均为依赖注入,这些由框架实现,以后源码解读时再做详述;
2.下面介绍Asp.Net Core自带的依赖注入框架对服务依赖的注册和使用。
第二手:依赖注入 - 注册服务
在Asp.Net Core中向容器中注册服务有三种方法,其区别在于生命周期不同:
- AddTransient:每次请求会获取一个新实例,即:每次GetService都会获取一个新实例
- AddScoped :每个请求会获取一个新实例,即:在一个请求内,每次GetService都会获得同一个实例
- AddSingleton:每次请求会获取同一个实例,即:在应用程序生命周期内,每次GetService都会获得同一个实例



所说的生命周期实际对应于类实例的创建时机,GetService实际是获取类的实例。
容器根据注册方式不同,判断是否需要创建新实例返回。
第一手:依赖注入 - 使用服务
1.Startup中使用

2.Controller构造函数注入



3.View注入
在Startup中的注册方式同Controller,这里只显示在View注入方式。


终局
本文介绍Asp.Net Core中默认的依赖注入(DI)模式,下局介绍读取配置文件,待续...
总目录
作者:dotNET之家
链接:https://www.jianshu.com/p/412f62ef55dc
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Asp.Net Core 第04局:依赖注入的更多相关文章
- ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...
- [ASP.NET Core 3框架揭秘] 依赖注入:控制反转
ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入.文件系统.配置选项和诊断日志等.这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务
毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的.ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器.该依赖注入容 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[8]:服务实例的生命周期
生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例.虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的.在我们提供的依赖注入 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[10]:与第三方依赖注入框架的适配
.NET Core具有一个承载(Hosting)系统,承载需要在后台长时间运行的服务,一个ASP.NET Core应用仅仅是该系统承载的一种服务而已.承载系统总是采用依赖注入的方式来消费它在服务承载过 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[9]:实现概述
<服务注册>.<服务消费>和<生命周期>主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现.在过去的多个版 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[7]:服务消费
包含服务注册信息的IServiceCollection集合最终被用来创建作为依赖注入容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IService ...
- [ASP.NET Core 3框架揭秘] 依赖注入[6]:服务注册
通过<利用容器提供服务>我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[4]:一个Mini版的依赖注入框架
在前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍.为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类 ...
随机推荐
- SQL常用语句之数据库数据类型-篇幅2
系统数据类型: 1.二进制数据类型 2.整数数据类型 3.浮点数据类型 4.精确小数数据类型 5.货币数据类型 6.日期/时间数据类型 7.字符数据类型 ...
- PHP json_encode 中文不转码,低版本处理
5.4 以上版本可以使用 JSON_UNESCAPED_UNICODE 来解决,但是低版本的,需要用其他方式 需要注意的是,encode_json参数为数组,不能为对象 function encod ...
- Zepto v1.0-1源码注解
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- 1、引言(Introduction)
1.1 欢迎 在生活中用到的机器学习算法: (1)打开谷歌.必应搜索到你需要的内容,正是因为他们有良好的学习算法 (2)每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件 机器学习为什么 ...
- Codeforces - 1176E - Cover it! - bfs
https://codeforc.es/contest/1176/problem/E 久了不写bfs了.一开始用dfs写,的确用dfs是很有问题的,一些奇怪的情况就会导致多染一些色. 注意无向图的边要 ...
- JS 数组 学习笔记
什么是数组 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始),整个数组用方括号表示.本质上数组属于一种特殊的,由Array构造出来的对象,typeof运算符返回数组的类型是 o ...
- WEEX-EROS开发小笔记
本文是作者之前刚接触移动端跨平台开发,使用weex-eros开发项目平日里记下来的一些笔记,分享出来方便为新手解惑,weex-eros是weex的一套解决方法,使用vue语法糖,对于前端开发者来说可以 ...
- iconfont图标symbol引用方式,有的图标不能通过设置color样式来修改颜色的解决办法
现象:iconfont安装后的图标,是通过symbol引用方式,有的图标不能通过color修改颜色的解决办法,有的又可以. <svg class="icon" aria-hi ...
- docker运行模式图
docker运行模式图:
- 一、C#获取特性(坑)
一.C#获取特性(坑) [Description("系统状态码")] [Display(Name = "成功", Description = "请求成 ...