Presentation is loading. Please wait.

Presentation is loading. Please wait.

张文清 .Net西安社区 me@zhangwenqing.org ASP.NET Core应用生命周期指北 张文清 .Net西安社区 me@zhangwenqing.org.

Similar presentations


Presentation on theme: "张文清 .Net西安社区 me@zhangwenqing.org ASP.NET Core应用生命周期指北 张文清 .Net西安社区 me@zhangwenqing.org."— Presentation transcript:

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 免责声明 本篇所涉及均为个人观点 资料和数据均来自网络 感谢! 问题和讨论


Download ppt "张文清 .Net西安社区 me@zhangwenqing.org ASP.NET Core应用生命周期指北 张文清 .Net西安社区 me@zhangwenqing.org."

Similar presentations


Ads by Google