Download presentation
Presentation is loading. Please wait.
Published byHeike Beck Modified 6年之前
1
张文清 .Net西安社区 me@zhangwenqing.org
ASP.NET Core应用生命周期指北 张文清 .Net西安社区
2
道生一,一生二, 二生三,三生万物 《道德经》
3
我是谁,我在哪 一些预备知识,概念和划重点
4
概念和体系:.NET Framework, .NET Core, ASP.NET, ASP.NET Core
图片出自2016年.NET Standard介绍
5
Runtime, SDK, Package Runtime(运行时),.NET Core Runtime SDK,.NET Core SDK
CoreCLR,包含JIT(Just In Time编译器),ILAsm(.NET IL中间语言编译程序),ILDasm( .NET IL中间语言反编译程序),TestHost(corehost.exe简单控制台执行器), mscorelib,一系 列原生类型和内部类型(包括.NET GC) CoreFX,System.Collections,System.IO,System.Xml等等其他组件 SDK,.NET Core SDK CLI,默认启动器,脚手架工具等 Roslyn,C#和VB.NET编译器和语言支持 SKD,MSBuild任务支持等其他VS必要组件 Fsc,F#语言支持 Package nuget (v3 json) ASP.NET Core所有的Assembly以nuget Package形式分发
6
1分钟Demo 创建并运行一个Hello .NET Group的 ASP.NET Core应用 观察结构和输出
7
启动 (Startup) 秩序建立开始
8
代码宏观角度看启动 Main()和IWebHostBuilder 固定的启动控制类Startup ConfigureServices()
应用程序的默认服务容器 依赖注入的入口 通常Helper方法命名为AddXXX Configure() 应用程序内容处理过程注册 通常Helper方法命名为UseXXX
9
依赖注入 (Dependency Injection)
ASP.NET Core中的依赖称为Service 通过抽象接口来解耦实现 默认通过构造函数注入 提供内置Services injection?view=aspnetcore-2.1#framework-provided-services 提供三种Service生命周期:短暂(Transient,每次创建一个实例),作用域内( Scoped,每请求创建一个实例),单例(Singleton) 支持三方Service Container,例如Autofac 在ConfigureService中返回 IServiceProvider
10
5分钟Demo 在1分钟Demo上加入并调用一些Service, 调用部分内置Service,观察不同生命周期 的Service的使用情况
11
中间件 (Middleware) 过程管控
12
中间件(Middleware)的处理模型和设计理念
13
中间件(Middleware)的三种写法
app.Use( (context, next) => { next(); }); app.Map(“/endpoint”, (app) => { app.Run( (context) => { //TODO app.Run( (context)=> { /* TODO */ public class ConventionalMiddleware { private readonly RequestDelegate _next; public ConventionalMiddleware (RequestDelegate next) _next = next; } public async Task InvokeAsync (HttpContext context) //TODO: await _next(context); app.UseMiddleware<ConventionalMiddleware>(); public class FactoryActivatedMiddleware : IMiddleware { public async Task InvokeAsync (HttpContext context, RequestDelegate next) //TODO: await next(context); } // register service services.AddTransient<FactoryActivatedMiddle ware>(); // apply middleware app.UseMiddleware<FactoryActivatedMiddlewar e>();
14
5分钟Demo 实现不同方式的Middleware,观察顺序( Order)和管道工作方式
15
上下文(context) - 指引方向的北极星
Middleware中直接使用(参数传入) 通过注入依赖 IHttpContextAccessor 前提:services.AddHttpContextAccessor();
16
MVC生命周期
17
MVC全景图 Dependency Injection Model request Model binding Router
Controller View (Razor) ViewComponent Format response response
18
5分钟Demo 实现一个简单的MVC应用,添加Model binding,输出view
19
退出 - 被忽略的落幕
20
安全退出(Graceful shutdown)
Microsoft.AspNetCore.Hosting.IApplicationLifetime
21
免责声明 本篇所涉及均为个人观点 资料和数据均来自网络 感谢! 问题和讨论
Similar presentations