DotNetCore知识栈
#、.NET Core提供的特性
1.开源、免费
2.轻量级、跨平台
3.组件化、模块化、IOC+Nuget、中间件
4.高性能
5.统一了MVC和WebAPI编程模型
a) 比如:ASP.NET Core 中MVC 和Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化
b) 比如:旧ASP.NET时代,写全局filter需要针对MVC 和Web API 分别编写代码,但在ASP.NET Core,直接使用一套中间件代码即可
6.可测试性
7.微服务、容器化支持
8.标准化 .NET API 规范- .NET STANDARD
#、迁移到.NET Core
目前市面上还存在很多传统 .NET 旧项目,我们需要根据公司情况决定是否升级到.NET Core。
如果需要进行旧项目升级的,可以参考文章:《.NET项目迁移到.NET Core操作指南》
VS和.NET Core安装
安装 .NET Core Runtime 和.NET Core SDK
【微软官方文档】ASP.NET Core *.* 个版本新特性
[坑]安装 .Net Core 2.2 SDK后,VS2017依然不能设置core2.2为目标框架
基础
.NET Core 运行程序注意事项(dotnet dll 与 dotnet run)
ASP.NET Core 中使用多个环境(开发、预发布、生产)- 默认为 Production
ASP.NET Core 动作结果(ActionResult)
ASP.NET Core 中控制器操作的多路径返回类型(IActionResult)
.NET Core 3.0 新的System.Text.JsonAPI
配置
ASP.NET Core 中的配置(json、xml、命令行、环境变量、内存变量等)
.Net Core 自定义配置源从远程API读取配置(ConfigurationProvider)
路由、模型绑定
ASP.NET Core WebAPI中,Controller标注 [ApiController] 特性,其路由只能使用[route]特性方式
ASP.NET Core MVC 构建可读性更高的ASP.NET Core 路由
ASP.NET Core 中的自定义模型绑定(IModelBinder)
依赖注入(IOC、DI)
什么是控制反转,和依赖注入:
控制反转的意思就是:平常我们需要一个类对象的时候需要new出来,而现在我们把new一个类对象的工作交给了IOC容器,当我们需要一个类对象的时候直接向IOC容器要,就可以了,这个就是控制反转。(控制权交个了IOC容器)
依赖注入的意思就是:当我需要一个类对象,IOC容器给我们这个类对象的过程其实就是依赖注入,依赖注入有构造函数注入和属性注入。
官方推荐通过构造函数。这也是所谓的显式依赖。Asp.Net Core 的标准依赖注入容器不支持属性注入。(可以使用autofac或者其他来实现属性注入)
可以参考 OSharp 框架,设计三个全局注入接口,来实现自动化注入:ISingletonDependency 和 ITransientDependency 、 IScopedDependency ( 单例、瞬时、范围)。
案例1:使用nlog时,想根据需要使用不同的配置文件Nlog.config 写日志时,就可以使用文章中介绍的 Factory 命名注入方案来实现
案例2:使用分布式缓存 IDistributedCache 时,想根据需要在一个项目中同时使用redis和sqlserver
ASP.NET Core 中多个接口对应同一个实现的正确姿势
[OSharp]使用 IServiceProvider.GetService<T>() 实现按需注入,优化性能
#、ASP.NET Core 集合 Autofac 的使用
Asp.Net Core 2.0 之旅---AutoFacIOC容器的使用教程
Asp.Net Core 2.0 之旅---AutoFac仓储泛型的依赖注入(泛型注入)
Asp.Net Core 2.0 之旅---数据访问仓储模式的事务管理(uow+rp)
ASP.NET Core 中使用Autofac实现属性注入的代码片段
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public IServiceProvider ConfigureServices(IServiceCollection services) { // 第一步:替换系统默认Controller创建器(否则Controller下面无法使用属性注入) // 在 services.AddMvc() 之前 services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>()); services.AddMvc(); var builder = new ContainerBuilder(); // 第二步:找到所有Controller的类型 // 通过Autofac对Controller类型进行属性注册 PropertiesAutowired() var assembly = this .GetType().GetTypeInfo().Assembly; var manager = new ApplicationPartManager(); manager.ApplicationParts.Add( new AssemblyPart(assembly)); manager.FeatureProviders.Add( new ControllerFeatureProvider()); var feature = new ControllerFeature(); manager.PopulateFeature(feature); builder.RegisterTypes(feature.Controllers.Select(ti => ti.AsType()).ToArray()).PropertiesAutowired(); // 第三步:配置 ContainerBuilder,返回 IServiceProvider builder.Populate(services); return new AutofacServiceProvider(builder.Build()); } |
ASP.NET Core WebAPI
创建ASP.NET Core Web API (ControllerBase、参数绑定源)
ASP.NET Core:MVC 与 Razor Pages
ASP.NET Core MVC 静态文件目录配置与访问授权
新的 Razor 机制
ASP.NET Core 中的 Razor 页面介绍(OnGet、OnPost、单页多Handler方式)
ASP.NET Core 中 Razor 页面的IPageFilter
ASP.NET Core 中 Razor 页面的路由和应用约定
ASP.NET Core Razor 配置:预编译,动态编译,混合编译
WebForm & MVC & Razor Pages
[译]ASP.Net Core 2.0中的Razor Page不是WebForm
ASP.NET Core Razor页面简化了 ASP.NET MVC 应用程序
HttpContext
ASP.NET Core 中访问 HttpContext 的方法
ASP.NET Core 中通过IHttpContextAccessor实现公用静态HttpContext
状态管理
常见方式:Cookie、Session、TempData、查询字符串、HttpContext.Items、缓存、依赖关系注入
#、session
ASP.NET Core 在通用数据保护条例规则下使用 session
#、cookie
ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用
[github]ASP.NET Core CookieManager
通信
#、HttpClient
ASP.NET Core HttpClient的各种用法、生命周期管理
DotNetCore 使用Http请求及基于 Polly 的处理故障
DotNetCore 中 HttpClientFactory 类源码分析
#、gRPC
ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
发布部署
ASP.NET Core 使用Supervisor进行托管部署
配置 ASP.NET Core 以使用代理服务器和负载均衡器
使用 Nginx 在 Linux 上托管 ASP.NET Core
使用 Apache 在 Linux 上托管 ASP.NET Core
单元测试
.NET Core 和 .NET Standard 单元测试最佳做法
使用 dotnet test 和 xUnit 在 .NET Core 中进行 C# 单元测试
使用 dotnet test 和 NUnit 在 .NET Core 中进行 C# 单元测试
使用 dotnet test 和 MSTest 在 .NET Core 中进行 C# 单元测试
使用 dotnet test --filter 进行选择性单元测试