ASP.NET Core
2019-02-09 14:20:49 62 举报
AI智能生成
ASP.NET Core学历记录图
作者其他创作
大纲/内容
Startup
Startup.cs
ConfigureServices
注册服务
EF Core
Identity
MVC
Configure
配置请求HTTP请求管道
类似于职责链模式
每个中间件都有二次处理机会
开发人员异常页面
异常处理程序
HTTPS协议
HTTPS重定向
静态文件
一般数据保护条例(GDPR)
ASP.NET Core MVC 和Razor
IConfiguration
读取配置文件
IHostingEnvironment
通过环境配置服务
Dev
Stag
Pro
Fallback
ILoggerFactory
在ConfigureServices方法中创建logger
Startup的logger
Startup(IHostingEnvironment, IConfiguration, ILoggerFactory)
Startup类
配置服务
ConfigServices方法
服务:可重用组件
用于DI
配置请求管道
Configure方法
构造函数注入
IHostingEnvironment
根据环境配置服务
IConfiguration
读取配置文件
ILoggerFactory
创建logger
ConfigServices方法
可选
在Configure方法调用之前,配置应用服务
通过约定设置Configuration Options
常见方式
Add{service_name}
Configure{Serivce}
常用配置
EF core
Identity
MVC/Razor
Configure方法
用于配置Http响应
通过IApplicationBuilder配置milddleware
IApplicationBuilder通过Host创建而不是注册在容器中
可注入IHostingEnvironment
可注入ILoggerFacotry
常用配置
开发人员异常页面
异常处理
Https协议
https重定向
静态文件
通用数据保护规则(GDPR)
MVC/Razor Pages
中间件配置
负责调用下一个中间件
或者返回
如果没有返回,则有二次处理机会
便利方法
可以再HostBuilder上调用ConfigServices方法配置服务
可多次调用
可以在HostBuilder上调用Configure方法配置请求管道
可多次调用,只有最有一次调用有效
使用IStartupFilter扩展Startup
IStartupFilter
Action<IApplicationBuilder> Configure (Action<IApplicationBuilder> next);
确保middleware在系统添加的默认中间件之前或之后执行
就是在HostBuilder调用UseStartup方法前后进行配置
IAppliationBuilder定义了类如何用来配置请求管道
可以实现多个中间件
执行顺序是容器注册顺序
可在下一个FIlter处理之前或之后添加中间件,因此可以确保添加到请求管道的开始或末尾
在Configure开始之前或者末尾配置middleware
执行顺序
执行顺序就是注册时的顺序
多个Filter可能作用于同一个对象,如果顺序很重要,整理注册时的顺序,确保运行时是有序的
host可能注册了很多中间件,运行在其他中间件之前或之后
如果要在默认注册的中间件之前执行,请将中间件注册在UseStartup之前
反之,添加在之后
如果要在默认注册的中间件之前执行,请将中间件注册在UseStartup之前
反之,添加在之后
在启动时从外部程序集加载配置
其他资源
DI
依赖关系注入概述
实现了IOC容器技术
Microsoft内置容器I Service provider
Startup的Config Services方法注册服务
问题点
修改实现必须修改代码
如果实现类需要依赖其他类,则配置代码会分散在整个应用
难以测试
解决方案
使用接口依赖抽象
在容器中注册依赖
构造函数注入依赖
框架提供的服务
Microsoft.AspNetCore.Hosting.Builder.IApplicationBuilderFactory
transient
Microsoft.AspNetCore.Hosting.IApplicationLifetime
singleton
Microsoft.AspNetCore.Hosting.IHostingEnvironment
singleton
Microsoft.AspNetCore.Hosting.IStartup
singleton
Microsoft.AspNetCore.Hosting.IStartupFilter
transient
Microsoft.AspNetCore.Hosting.Server.IServer
singleton
Microsoft.AspNetCore.Http.IHttpContextFactory
transient
Microsoft.Extensions.Logging.ILogger<T>
singleton
Microsoft.Extensions.Logging.ILoggerFactory
singleton
Microsoft.Extensions.ObjectPool.ObjectPoolProvider
singleton
Microsoft.Extensions.Options.IConfigureOptions<T>
transient
Microsoft.Extensions.Options.IOptions<T>
singleton
System.Diagnostics.DiagnosticSource
singleton
System.Diagnostics.DiagnosticListener
singleton
服务生命周期
transient
每次请求都是新的实例
scope
一次请求内都是同一个实例
singleton
只有第一次请求会创建实例,后续请求都是同一个
构造函数注入行为
IServiceProvider
Activator Utilities
允许外部对象使用依赖注入
只能重载一个依赖注入的构造函数
public的构造函数
可以接受容器中没有的参数类型,必须有默认值
实体上下文框架
Add Db Context
scope life time
生存期与注册选项
transient object始终不同
Add Transient
scope object在一次请求中始终一样,或者说在一个线程内
Add Scoped
singleton object在初始化后,后续请求都一样
Add Singleton
Add Singleton(new )
从main方法调用服务
host. Services. Create Scope
I Service Scope
I Service Provider
Get Required Service
作用域验证
Scoped services aren't directly or indirectly resolved from the root service provider.
Scoped services aren't directly or indirectly injected into singletons.
请求服务
不推荐使用Request Services
推荐通过构造函数直接注入
设计能够进行依赖注入的服务
使用DI注入依赖
避免静态方法访问
避免手动实例化依赖
遵循SOLID原则
服务处理
尽量交给容器实例化对象
容器实例化的对象会自动调用dispose方法
默认服务容器替换
安装包
配置Startup. ConfigServices返回IServicesProvider
配置默认模型
具体配置建议查看第三方容器的user guide
内置容器缺点
不支持属性注入
根据名称注入
子容器
自定义生存期
延迟加载
建议
不支持异步构造函数,所以在构造完成后进行异步操作
避免存储数据对象
避免访问静态服务
避免使用服务定位模式
避免静态访问HttpContext
Route
基础知识
早期版本的差异
使用路由中间件
路由模板参考
保留的路由名称
路由约束参考
正则表达式
自定义路由约束
参数转换器参考
URL生成参考
复杂段
Environment
Configuration
Options
Logger
ExcptionHandler
Middleware
Host
Server
Send HTTP Request
0 条评论
下一页