[ASP.NET Core] 概述
Overview
Dependency Injection
依赖注入是实现控制反转的方式之一。DI主要负责管理对象的生命周期,从构造到销毁。
1 |
|
Singleton
builder.Services.AddSingleton()
注入到容器中的单例对象在整个应用生命周期内都可以访问,而且只会有一个
这个方法有挺多重载,不过作用都类似,按需使用。
第一次向容器请求时构造
Transient
builder.Services.AddTransient()
每次请求容器都生成一个全新实例
Scoped
builder.Services.AddScoped()
在整个作用域当中,请求的对象是单例,不同的作用域对象是不同的。
作用域是一次Web Request
Repository Pattern
中文名 仓储模式
对标Spring的DAO层,用来解耦Contoller和数据库实现
WebApplication
ASP.NET Core应用的起点是Microsoft.AspNetCore.Builder.WebApplication
,通过建造者模式创建一个WebApplication
并启动
WebApplication
还会读取根目录的配置文件appsettings.json
所有服务都在建造时就确定了,通过Services
属性构造
Request Pipeline
用户发来的请求会经过一条管线,管线上有许多中间件(Middleware)来处理请求。中间件是可配置的,如果没有配置则不会对请求进行任何处理。
例如:
- Routing中间件用来将请求映射(Mapping)到应用程序的某个处理部分。
- Static Files用于获取静态资源文件,例如css、js、图片等。这些静态资源只能从项目目录的wwwroot内读取
要配置请求管线,时机是app启动前,例如模板代码中
1 |
|
中间件的添加顺序会影响执行顺序
管线的终点叫做终结点(Endpoint),进入该中间件说明用户请求走完了整个流程。
Razor
Razor是一套可内嵌C#的HTML模板引擎,类似于JSP,Razor文件扩展名是cshtml。
Razor可以创建Shared模板,用来给页面头和尾额外添加一些内容。模板放在根目录Shared文件夹下
语法
在HTML里内嵌C#代码行前要加符号"@"
如果需要代码块,则用
1 |
|
的形式
Frontend Techniques
https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/choose-web-ui
应该选择适合的WebUI
Razor Page
https://learn.microsoft.com/zh-cn/aspnet/core/razor-pages
直接对标JSP,交互逻辑全写在页面上
MVC
https://learn.microsoft.com/zh-cn/aspnet/core/mvc/overview
直接对标Spring MVC,相比page,把数据和视图分离了,但视图依然使用razor展示
Blazor
https://learn.microsoft.com/zh-cn/aspnet/core/blazor
直接对标…没有能对标的,类似Vue、React,使用C#作为前端框架语言
这玩意甚至分成在服务端运行和在客户端运行的前端框架
在客户端运行使用WebAssembly
在服务端运行,使用SingalR与前端通信
Backend Techniques
后端处理数据,有很多办法可以发送数据给前端
RESTful API
核心思想就是请求地址映射到行为(action)
HTTP状态码决定结果
绝大多数情况下,使用JSON作为数据的载体格式
Swagger是一套最常见的用于REST接口文档、测试的工具
有两种提供RESTful API的办法:
- Mininal API
- 基于DI的Controller的API
REST用于前后端交互比较多
gRPC
使用RPC(Remote Procedure Call)进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。
gRPC是Google开源的RPC实现,使用Protocol序列化数据进行交互
RPC用于服务与服务间交互比较多
SignalR
https://learn.microsoft.com/zh-cn/aspnet/core/signalr/introduction
一种服务端与客户端双向通信的办法。
通过使用WebSocket、Server Send Event或者轮询实现
Kestrel
默认使用内置的Kestrel作为Web服务器,作用类似Java的Tomcat