原创 自定義Key類型的字典無法序列化的N種解決方案

當我們使用System.Text.Json.JsonSerializer對一個字典對象進行序列化的時候,默認情況下字典的Key不能是一個自定義的類型,本文介紹幾種解決方案。一、問題重現 二、自定義JsonConverter能解決嗎? 三、自

原创 爲什麼ASP.NET Core的路由處理器可以使用一個任意類型的Delegate

毫不誇張地說,路由是ASP.NET Core最爲核心的部分。路由的本質就是註冊一系列終結點(Endpoint),每個終結點可以視爲“路由模式”和“請求處理器”的組合,它們分別用來“選擇”和“處理”請求。請求處理器通過RequestDeleg

原创 深入解析ASP.NET Core MVC的模塊化設計[下篇]

ASP.NET Core MVC的“模塊化”設計使我們可以構成應用的基本單元Controller定義在任意的模塊(程序集)中,並在運行時動態加載和卸載。《設計篇》介紹了這種爲“飛行中的飛機加油”的方案的實現原理?本篇我們將演示將介紹“分散定

原创 深入解析ASP.NET Core MVC應用的模塊化設計[上篇]

ASP.NET Core MVC的“模塊化”設計使我們可以構成應用的基本單元Controller定義在任意的模塊(程序集)中,並在運行時動態加載和卸載。這種爲“飛行中的飛機加油”的方案是如何實現的呢?該系列的兩篇文章將關注於這個主題,本篇着

原创 ASP.NET Core MVC應用模型的構建[4]: Action的選擇

ControllerModel類型的Actions屬性包含一組描述有效Action方法的ActionModel對象。對於定義在Controller類型中的所有方法,究竟哪些方法才能成爲有效的Action方法呢?所以在正式介紹ActionMo

原创 ASP.NET Core MVC應用模型的構建[3]: Controller的收集

從編程的角度來看,一個MVC應用是由一系列Controller類型構建而成的,所以對於一個代表應用模型的ApplicationModel對象來說,它的核心就是Controllers屬性返回的一組ControllerModel對象,每個Con

原创 ASP.NET Core MVC應用模型的構建[2]: 定製應用模型

在對應用模型的基本構建方式具有大致的瞭解之後,我們來系統地認識一下描述應用模型的ApplicationModel類型。對於一個描述MVC應用模型的ApplicationModel對象來說,它承載的元數據絕大部分是由默認註冊的DefaultA

原创 ASP.NET Core MVC應用模型的構建[1]: 應用的藍圖

我個人覺得這是ASP.NET Core MVC框架體系最核心的部分。原因很簡單,MVC框架建立在ASP.NET Core路由終結點上,它最終的目的就是將每個Action方法映射爲一個或者多個路由終結點,路由終結點根據附加在Action上的若

原创 基於HTTP2/3的流模式消息交換如何實現?

我想很多人已經體驗過GRPC提供的三種流式消息交換(Client Stream、Server Stream和Duplex Stream)模式,在.NET Core上構建的GRPC應用本質上是採用HTTP2/HTTP3協議的ASP.NET C

原创 編寫高效的代碼,你應該瞭解Array、Memory、ReadOnlySequence . . .

針對“緩衝區”編程是一個非常注重“性能”的地方,我們應該儘可能地避免武斷地創建字節數組來存儲讀取的內容,這樣不但會導致大量的字節拷貝,臨時創建的字節數組還會帶來GC壓力。要正確、高效地讀寫緩衝內容,我們應該對幾個我們可能熟悉的類型具有更深的

原创 WebAssembly核心編程[4]: Memory

由於Memory存儲的是單純的二進制字節,所以原則上我們可以用來它作爲媒介,在wasm模塊和數組程序之間傳遞任何類型的數據。在JavaScript API中,Memory通過WebAssembly.Memory類型表示,我們一般將它內部的緩

原创 WebAssembly核心編程[3]: Module 與 Instance

WebAssembly程序總是以模塊來組織,模塊是基本的部署、加載和編譯單元。在JavaScript編程接口中,模塊通過WebAssembly.Module類型表示。WebAssembly.Module通過加載的.wasm二進制文件創建而成

原创 WebAssembly核心編程[2]:類型系統

對於絕大多數編程語言來說,類型都是編程的基礎,WebAssembly自然也不例外。總的來說,WebAssembly涉及的類型不多,很好掌握,接下來我們就來介紹一下WebAssembly編程涉及到的幾種類型。本篇內容參考WebAssembly

原创 WebAssembly核心編程[1]:wasm模塊實例化的N種方式

當我們在一個Web應用中使用WebAssembly,最終的目的要麼是執行wasm模塊的入口程序(通過start指令指定的函數),要麼是調用其導出的函數,這一切的前提需要創建一個通過WebAssembly.Instance對象表示的wasm模

原创 WebAssembly入門筆記[4]:利用Global傳遞全局變量

利用WebAssembly的導入導出功能可以靈活地實現宿主JavaScript程序與加載的單個wasm模塊之間的交互,那麼如何在宿主程序與多個wasm之間傳遞和共享數據呢?這就需要使用到Global這個重要的對象了。一、數值類型全局變量