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依赖注入框架的设计与实现,我们按照类 ...
随机推荐
- Struts2之上传
单文件上传 上传页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- 【题解】Hankson 的趣味题
题目大意 已知正整数$a_{0}$.$a_{1}$.$b_{0}$.$b_{1}$($1 \leq a_{0}, a_{1}, b_{0}, b_{1} \leq 2 \times 10^{9}$), ...
- anaconda安装教程、管理虚拟环境
原文链接:https://blog.csdn.net/ITLearnHall/article/details/81708148 另可参看文章:https://www.cnblogs.com/jonin ...
- NGUI多行输入框和滚动条结合使用(text list script 和scroll bar script)
一,我们添加一个label,如下图:将label属性设置 二,给label添加一个box collider.然后在add component 添加test list,如下图: 三,添加一个脚本Test ...
- tensorflow用dropout解决over fitting
在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训 ...
- Redis在windows下的环境搭建
Redis在windows下的环境搭建 下载windows版本redis,,官方下载地址:http://redis.io/download, 不过官方没有Windows版本,官网只提供linux版本的 ...
- nuxtJs - axios 的 IE 兼容性的问题
因为考虑SEO, 所以采用nuxt.js进行服务端渲染, 用熟了vue, nuxt无缝对接简直不要太爽 烦人的需求又来了, 要兼容IE ~~ 兼容处理 无非就是babel 将高级语法转成弱智IE看得懂 ...
- Ehcahe独立使用
<?xml version="1.0" encoding="utf-8"?><ehcache xmlns:xsi="http://w ...
- phpstorm 开发php入门
环境:ubuntu phpstorm apache mysql 一.安装软件 安装apache服务器 https://i.cnblogs.com/EditPosts.aspx?postid=1113 ...
- Python 语音识别
调用科大讯飞语音听写,使用Python实现语音识别,将实时语音转换为文字. 参考这篇博客实现的录音,首先在官网下载了关于语音听写的SDK,然后在文件夹内新建了两个.py文件,分别是get_audio. ...