开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了……
本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料。我进行了知识点归类,让大家可以更清晰的学习.NET Core。
首先感谢资料原作者的贡献。
介绍.NET历史、开源之路、基础、路由、依赖注入IOC、HttpContext、cookie|session、HttpClient、gRPC、单元测试、发布部署等等。
介绍.NET工程化、AOP、异常处理、缓存、日志、响应优化、上传下载、健康检查、后台任务、认证和授权、安全性(Https、CORS、CSRF)、EF Core 等等
第三篇:.NET Core 学习资料精选:高级&微服务架构
介绍性能、原理、微服务架构、Docker、DDD等知识
这是第一篇,知识点如图:
.NET 简介
#、.NET 开源之路
2014.11月 .NET Core 项目启动,2016.06月 .NET Core 1.0 发布
.NET Core 3.0 新特性:支持 Windows 桌面应用(windows only)
.NET Core Roadmap
#、.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
Linux/MacOS 安装 .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.Json API
配置
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实现属性注入的代码片段
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 类源码分析
#、RPC
Grpc
ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
[github]基于gRPC的实时网络引擎:MagicOnion
DotNetty
[github]Azure开源的网络通信框架DotNetty
#、SignalR
[如鹏网九节公开课].NET Core 中使用SignalR实现聊天服务器
发布部署
.Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布
在Linux上使用Nginx + surpervisor部署ASP.NET Core程序
配置 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 进行选择性单元测试
==============================================================================