Asp.Net.Core 系列-中间件和依赖注入进阶篇
2017-08-09 22:30
1116 查看
上一节讲了中间件和依赖注入的基础,紧接着:
中间件是怎么使用的?使用步骤是什么?
只要把中间件注册到管道中就行了,可以借助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注册的中间件会先执行。
这是一种扩展的写法。
这个样子一看就会很明白实现的原理都是一样的。
这里就是实现了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()来引发调用。
中间件是怎么使用的?使用步骤是什么?
只要把中间件注册到管道中就行了,可以借助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
.ConfigureServices(svcs => svcs } 看上去是很简单的方式。而我们在代码中看到的是这样的:
这是一种扩展的写法。
这个样子一看就会很明白实现的原理都是一样的。
这里就是实现了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()来引发调用。
相关文章推荐
- Asp.Net.Core 系列-中间件和依赖注入Hosting篇
- Asp.Net.Core 系列-中间件和依赖注入基础篇
- 3.1依赖注入「深入浅出ASP.NET Core系列」
- 3.1依赖注入「深入浅出ASP.NET Core系列」
- ASP.NET Core 2.0系列学习笔记-DI依赖注入
- asp.net core 依赖注入
- ASP.NET Core 2.0 依赖注入
- 【ASP.NET Core】ASP.NET Core 依赖注入
- [转]解读ASP.NET 5 & MVC6系列(7):依赖注入
- [转]解读ASP.NET 5 & MVC6系列(7):依赖注入
- 解读ASP.NET 5 & MVC6系列(7):依赖注入
- ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等
- ASP.NET Core中使用GraphQL - 第三章 依赖注入
- ASP.Net Core-依赖注入IoC
- 用工厂模式解决ASP.NET Core中依赖注入的一个烦恼
- Asp.net core 中的依赖注入
- Asp.net core 学习笔记 ( DI 依赖注入 )
- ASP.NET Core 配置文件(无处不在的依赖注入)
- ASP.NET Core依赖注入多个服务实现类
- 了解ASP.NET Core 依赖注入,看这篇就够了 于2017年11月6日由jesseliu发布