開源跨平臺的.NET Core,還沒上車的趕忙的,來不及解釋了……html
本系列文章,主要分享一些.NET Core比較優秀的社區資料和微軟官方資料。我進行了知識點歸類,讓你們能夠更清晰的學習.NET Core。linux
首先感謝資料原做者的貢獻。nginx
第一篇:.NET Core 學習資料精選:入門git
介紹.NET歷史、開源之路、基礎、路由、依賴注入DI、HttpContext、cookie|session、HttpClient、gRPC、單元測試、發佈部署等等。程序員
第二篇:.NET Core 學習資料精選:進階github
介紹.NET工程化、AOP、異常處理、緩存、日誌、響應優化、上傳下載、健康檢查、後臺任務、認證和受權、安全性(Https、CORS、CSRF)、EF Core 等等web
第三篇:.NET Core 學習資料精選:高級&微服務架構redis
介紹性能、原理、微服務架構、Docker、DDD等知識sql
這是第一篇,知識點如圖: apache
#、.NET 開源之路
2014.11月 .NET Core 項目啓動,2016.06月 .NET Core 1.0 發佈
.NET Core 3.0 新特性:支持 Windows 桌面應用(windows only)
【翻譯】.NET Core3.1發佈(及各版本支持時長)
.NET Core Roadmap
#、.NET Core提供的特性
1.免費和最寬鬆的開源協議
.NET Core從屬於.NET基金會,由微軟進行官方支持。使用最寬鬆的MIT和Apache 2開源協議,文檔協議遵循CC-BY。這將容許任何人任何組織和企業任意處置,包括使用,複製,修改,合併,發表,分發,再受權,或者銷售。惟一的限制是,軟件中必須包含上述版權和許可提示,後者協議將會除了爲用戶提供版權許可以外,還有專利許可,而且受權是免費,無排他性的(任何我的和企業都能得到受權)而且永久不可撤銷,用戶使用.NET Core徹底不用擔憂收費問題,你能夠很自由的部署在任何地方.
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操做指南》
Vistual Studio
[坑]安裝 .Net Core 2.2 SDK後,VS2017依然不能設置core2.2爲目標框架
把.net Core 項目遷移到VS2019 for MAC(無需改一行代碼)
調試
VS2019自帶 反編譯 與 Reflector 反編譯工具比較
Visual Studio 2017中使用SourceLink調試Nuget包源碼(SourceLink方式)
Visual Studio 2017調試開源項目代碼(下載源代碼文件方式)
VS Code 開發.NET Core
.NET Core SDK
安裝 .NET Core Runtime 和.NET Core SDK
Linux/MacOS 安裝 .NET Core SDK 命令
.NET Core 卸載工具 (dotnet-core-uninstall)
【微軟官方文檔】ASP.NET Core *.* 個版本新特性
術語:
.NET Core RID 目錄 (參數:-r|--runtime)
.NET Core 目標框架 (參數:-f|--framework)
dotnet publish 發佈的文件中包含pdb文件,不論模式是Debug仍是Release。能夠經過配置:
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>
……
</PropertyGroup>
--self-contained 自包含參數。將.NET Core運行時及.NET Core類庫隨應用一塊兒打包,這樣能夠徹底避免老項目在系統.NET Core運行時升級時,帶來莫名異常的問題
.NET Core 運行程序注意事項(dotnet dll 與 dotnet run)
core api 支持狀況
ASP.NET Core 端口配置
Asp.Net Core WebAPI 端口修改(host.json)
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、命令行、環境變量、內存變量等)
ASP.NET Core 中IOptions、IOptionsMonitor以及IOptionsSnapshot
.Net Core 自定義配置源從遠程API讀取配置(ConfigurationProvider)
ASP.NET Core WebAPI中,Controller標註 [ApiController] 特性,其路由只能使用[route]特性方式
ASP.NET Core MVC 構建可讀性更高的ASP.NET Core 路由
ASP.NET Core 3.x 爲何採用新的 Endpoint Routing 路由系統
ASP.NET Core 中的自定義模型綁定(IModelBinder)
ASP.NET Core Web API 入參解析InputFormatter
什麼是控制反轉,和依賴注入:
依賴倒置原則(Dependence inversion principle,DIP):軟件設計原則,要依賴於抽象,不要依賴具體實現。
控制反轉(Inversion of Control,IoC):IOC是一種實現DIP原則的模式。日常咱們須要一個類對象的時候須要new出來,而如今咱們把new一個類對象的工做交給了IOC容器,當咱們須要一個類對象的時候直接向IOC容器要,就能夠了,這個就是控制反轉。(控制權交個了IOC容器)
依賴注入(Dependency Injection,DI):DI是實現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>() 實現按需注入,優化性能
在WPF中使用.NET Core 3.0依賴項注入和服務提供程序
#、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 技巧之僞屬性注入(屬性注入會形成類型的依賴關係隱藏,測試不友好等)
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()); }
#、構造函數注入&屬性注入
描述來源於Abp.io中文文檔:查看詳情
構造方法注入
是將依賴項注入類的首選方式.這樣,除非提供了全部構造方法注入的依賴項,不然沒法構造類.所以,該類明確的聲明瞭它必需的服務.
屬性注入
public class MyService : ITransientDependency
{
public ILogger<MyService> Logger { get; set; }
public MyService()
{
Logger = NullLogger<MyService>.Instance;
}
}
對於屬性注入依賴項,使用公開的setter聲明公共屬性.這容許DI框架在建立類以後設置它.
屬性注入依賴項一般被視爲可選依賴項.這意味着沒有它們,服務也能夠正常工做.Logger就是這樣的依賴項,MyService能夠繼續工做而無需日誌記錄.
爲了使依賴項成爲可選的,咱們一般會爲依賴項設置默認/後備(fallback)值.在此示例中,NullLogger用做後備.所以,若是DI框架或你在建立MyService後未設置Logger屬性,則MyService依然能夠工做但不寫日誌.
屬性注入的一個限制是你不能在構造函數中使用依賴項,由於它是在對象構造以後設置的.
當你想要設計一個默認注入了一些公共服務的基類時,屬性注入也頗有用.若是你打算使用構造方法注入,那麼全部派生類也應該將依賴的服務注入到它們本身的構造方法中,這使得開發更加困難.可是,對於非可選服務使用屬性注入要很是當心,由於它使得類的要求難以清楚地看到.
建立ASP.NET Core Web API (ControllerBase、參數綁定源)
版本控制
ASP.Net Core WebAPI 幾種版本控制對比(nuget:Microsoft.AspNetCore.Mvc.Versioning)
ASP.NET Core 構建帶有版本控制的 API 接口(結合SwaggerUI)
WebApi管理和性能測試工具WebApiBenchmarks
ASP.NET Core AutoWrapper 自定義響應輸出
ASP.NET Core MVC 靜態文件目錄配置與訪問受權
ASP.NET Core 中的特殊視圖文件(_Layout.cshtml、_ViewStart.cshtml、_ViewImports.cshtml)
新的 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 應用程序
ASP.NET Core 中訪問 HttpContext 的方法
ASP.NET Core 中經過IHttpContextAccessor實現公用靜態HttpContext
常見方式:Cookie、Session、TempData、查詢字符串、HttpContext.Items、緩存、依賴關係注入
Cookie 的 SameSite 屬性(注意http>>https重定向跨域致使的cookie丟失問題)
#、session
ASP.NET Core 在通用數據保護條例規則下使用 session
#、cookie
ASP.NET Core SameSite 設置引發 Cookie 在 QQ 瀏覽器中不起做用
[github]ASP.NET Core CookieManager
#、HttpClient
傳統.NET 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上使用 pm2 守護你的 .NET Core 應用程序--(pm2 github starts 31.1k)
在Linux上使用Nginx + supervisor部署ASP.NET Core程序--(supervisor github starts 5.8k)
配置 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 進行選擇性單元測試
ASP.NET Core MVC 2.x 全面教程 -- solenovex
ASP.NET Core 3.0 入門視頻 -- solenovex
dotnet core windows和linux的時區處理 (開源庫:nodatime)
==============================================================================
over,謝謝查閱,以爲文章對你有收穫,請多幫推薦。歡迎向我提供更好的資料信息。
原文出處:https://www.cnblogs.com/heyuquan/p/dotnet-basic-learning-resource.html