上一节讲了中间件和依赖注入的基础,紧接着:

中间件是怎么使用的?使用步骤是什么?

只要把中间件注册到管道中就行了,可以借助Startup对象(DelegateStartup或者ConventionBasedStartup)来完成之外,也可以利用另一个叫做StartupFilter的对象来实现。所谓的StartupFilter是对所有实现了IStartupFilter接口的类型及其对象的统称。IStartupFilter接口定义了如下一个唯一的方法Configure,该方法的参数next返回的Action<IApplicationBuilder>对象体现了后续StartupFilter和Startup对中间件的注册,而自身对中间件的注册则实现在返回的Action<IApplicationBuilder>对象中。

这就是微软定义好的接口了,我们只要负责实现他就ok。

我们可以采用服务注册的方式注册多个StartupFilter。具体来说,StartupFilter具有如下两种不同的注册方式,一种是通过调用WebHostBuilder的ConfigureServices方法以服务的形式注册所需的StartupFilter,另一种则是将针对StartupFilter的服务注册实现在启动类的ConfigureServices方法上。

也就是我们新建.Net Core项目里面看到的Program.cs和Startup.cs里面的实现。不同之处在于:StartupFilter注册的中间件会先执行。

 //注册方式1
new WebHostBuilder().ConfigureServices(svcs => svcs.AddSingleton<IStartupFilter, Filter1>().AddSingleton<IStartupFilter, Filter2>())                  //注册方式 public class Startup{      public void ConfigureServices(IServiceCollection svcs){       svcs.AddSingleton<IStartupFilter,Filter1>().AddSingleton<IStartupFilter, Filter2>();    }  }看上去是很简单的方式。而我们在代码中看到的是这样的:

这是一种扩展的写法。

这个样子一看就会很明白实现的原理都是一样的。

这里就是实现了IStartupFilter

这里你也许会有疑问,这个Microsoft.AspNetCore.Hosting是什么?通俗一点就是承载。

.Net.Core是承载到CLR上面的。

下一节介绍Microsoft.AspNetCore.Hosting

我们再来看看依赖注入,在上面的中间件使用代码中,就有依赖注入,

就是这个,.Net.Core的依赖注入是通过Microsoft.Extensions.DependencyInjection来实现的,里面定义了IServiceCollection接口。

具体操作就是添加依赖(Add),描述依赖(Describe),出差依赖(Stroe),解析依赖(Resolve)。提供了一些接口,对外接口就是IServiceCollection接口

内部接口有:

ServiceDescriptor 服务描述,具有服务类型,生命周期

ServiceProvider 解析依赖,依赖注入到容器中,ServiceScope来控制,单一模式,临时模式,实例化模式

ServiceCollection 服务出差,具有Add等等操作,就是一个List<ServiceDescriptor>

CallSiteValidator 调用点也就是请求过来后Invoke会在这里面调用。

具体实现可以自己看源码。分析Microsoft.AspNetCore.Hosting也会讲解。

记住依赖注入,会构造服务委托链。通过UseXXX()来引发调用。


转载于:https://www.cnblogs.com/jristy/p/7328024.html

Asp.Net.Core 系列-中间件和依赖注入进阶篇相关推荐

  1. ASP.NET Core技术研究-探秘依赖注入框架

    ASP.NET Core在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务.提供服务.依赖注入不仅服务于ASP.NET Core自身,同时也是应用程序的服务提供者. 毫不夸张的说,ASP.NET ...

  2. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照"好莱坞法则"实现应用程序的代码与框架之间的交互.我们可以采用若干设计模式 ...

  3. ASP.NET Core Filter如何支持依赖注入

    概述 通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码.内置筛选器处理任务,例如:授权(防止用户访问未获授权的资源).响应缓存(对请求管道进行短路出路,以 ...

  4. ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起

    我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ...

  5. Asp.net Core 自带DI依赖注入

    一.新增依赖注入类DIIoc /// <summary>/// DI依赖注入/// </summary>public class DIIoc{public static voi ...

  6. 依赖注入的三种方式_ASP.NET Core技术研究-探秘依赖注入框架

    ASP.NET Core在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务.提供服务.依赖注入不仅服务于ASP.NET Core自身,同时也是应用程序的服务提供者. 毫不夸张的说,ASP.NET ...

  7. ASP.NET CORE系列【一】搭建ASP.NET CORE项目

    原文:ASP.NET CORE系列[一]搭建ASP.NET CORE项目 为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug ...

  8. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  9. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

最新文章

  1. 关于长江的题目_长江流域综合治理练习题
  2. 【优秀奖】Java开发那点事征文
  3. 《JS权威指南学习总结--第九章 类和模板》
  4. 普通调幅(AM)与抑制载波双边带调幅(DSB)matlab编程实现
  5. 【Python】 dict 以key名 去重运算
  6. linux 模拟手机浏览器,Firefox模拟手机浏览器(iOS+Android) – UserAgent Switcher使用方法...
  7. 汇编指令:CLD STD MOVS LODS STOS
  8. Linux修改网卡地址(临时/永久)
  9. java计算机毕业设计网上鲜花店系统源码+系统+数据库+lw文档
  10. 世界曾经有这样一个中国
  11. royer推挽自激电路
  12. unity开发 宝箱掉落与产出
  13. (HBuilder X) 从下载HBuilderX到生成app.apk
  14. Word Embedding与Word2Vec学习
  15. 浙大版《C语言程序设计实验与习题指导(第3版)》题目集
  16. SpringBoot 官方强烈推荐,连接池,太快了!
  17. 想花钱速学互联网行业,大概花两三个月的时间,出来好找工作吗
  18. Android Studio NKD开发之 FFmpeg库的引入--简单播放器(主要验证是否正确引入ffmpeg库)
  19. 力量搬运术-“势”的妙用
  20. Python 与神奇的数学之龙形曲线

热门文章

  1. python爬虫可以干什么-Python 爬虫一 简介
  2. python怎么读excel文件-python如何读写excel文件
  3. python的jupyter的使用教程-JupyterNotebook设置Python环境的方法步骤
  4. python语法手册-《Python 手册》pdf版电子书免费下载
  5. 流程的python-《流畅的 Python》到底好在哪?
  6. c语言 python-C语言和python的区别
  7. python难学嘛-python语言难学吗
  8. python中文什么意思-python是什么
  9. python详细安装教程linux-Python 环境安装步骤
  10. python画三维几何图-Python常见几何图形绘制