摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京東正式開始預售,并在半天之內銷售近一千套,隨后迅速占據京東科技IT圖書暢銷榜榜首的位置。為期一周的限時五折優惠將在今天24時結束。有興趣的朋友可以加入本書讀者群購買。 閱讀全文
posted @ 2020-03-20 12:22 Artech 閱讀 (4174) 評論 (45) 編輯
摘要:ASP.NET Core提供了多種認證方式,它們的實現都基于相同的認證模型。本篇文章提供了一個極簡的實例讓讀者體驗如何在ASP.NET Core應用中實現認證、登錄和注銷 閱讀全文
posted @ 2020-03-25 08:37 Artech 閱讀 (900) 評論 (0) 編輯
摘要:ASP.NET Core框架中的很多核心對象都是通過依賴注入方式提供的,如用來對應用進行初始化的Startup對象、中間件對象,以及ASP.NET Core MVC應用中的Controller對象和View對象等,所以我們可以在定義它們的時候采用注入的形式來消費已經注冊的服務。下面簡單介紹幾種服務注入的應用場景。 閱讀全文
posted @ 2020-03-24 08:24 Artech 閱讀 (1489) 評論 (3) 編輯
摘要:《200行代碼,7個對象——讓你了解ASP.NET Core框架的本質》讓很多讀者對ASP.NET Core管道有了真實的了解。在過去很長一段時間中,有很多人私信給我:能否按照相同的方式分析一下MVC框架的設計與實現原理,希望這篇文章能夠滿足你們的需求。在對本章內容展開介紹之前,順便作一下廣告:《ASP.NET Core 3框架揭秘》已經開始銷售,限時5折優惠還有最后3天,有興趣的從這里入群購買。 閱讀全文
posted @ 2020-03-23 08:27 Artech 閱讀 (752) 評論 (0) 編輯
摘要:《200行代碼,7個對象——讓你了解ASP.NET Core框架的本質》讓很多讀者對ASP.NET Core管道有了真實的了解。在過去很長一段時間中,有很多人私信給我:能否按照相同的方式分析一下MVC框架的設計與實現原理,希望這篇文章能夠滿足你們的需求。在對本章內容展開介紹之前,順便作一下廣告:《ASP.NET Core 3框架揭秘》已經開始銷售,現時5折優惠還有最后4天,有興趣的從這里購買。 閱讀全文
posted @ 2020-03-22 12:44 Artech 閱讀 (1407) 評論 (3) 編輯
摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京東正式開始預售,并在半天之內銷售近一千套,隨后迅速占據京東科技IT圖書暢銷榜榜首的位置。為期一周的限時五折優惠將在今天24時結束。有興趣的朋友可以加入本書讀者群購買。 閱讀全文
posted @ 2020-03-20 12:22 Artech 閱讀 (4174) 評論 (45) 編輯
摘要:在過去一段時間內,寫了一系列關于ASP.NET Core 3相關的文章,其中絕大部分來源于即將出版的《ASP.NET Core 3框架揭秘》,先將它們匯總在這里。如果對《ASP.NET Core 3框架揭秘》感興趣,可以通過這里加入讀者群。 閱讀全文
posted @ 2020-03-16 08:13 Artech 閱讀 (3206) 評論 (11) 編輯
摘要:實際上HostBuilder對象并沒有在實現的Build方法中調用構造函數來創建Host對象,該對象利用作為依賴注入容器的IServiceProvider對象創建的。為了可以采用依賴注入框架來提供構建的Host對象,HostBuilder必須完成前期的服務注冊工作。總地來說,HostBuilder針對Host對象的構建大體可以劃分為5個步驟。 閱讀全文
posted @ 2020-03-12 08:24 Artech 閱讀 (385) 評論 (2) 編輯
摘要:2019年1月19日,微軟技術(蘇州)俱樂部成立,我受邀在成立大會上作了一個名為《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的運行原理和設計思想創建了一個 “迷你版” 的ASP.NET Core框架,并且利用這個 “極簡” 的模擬框架闡述了ASP.NET Core框架最核心、最本質的東西。整個框架涉及到的核心代碼不會超過200行,涉及到7個核心的對象。由于ASP.NET Core 3.X采用了不同的應用承載方式,所以我們將這個模擬框架升級到3.x版本。 閱讀全文
posted @ 2020-03-09 08:16 Artech 閱讀 (5508) 評論 (16) 編輯
摘要:我們在《總體設計[上篇]》和《總體設計[下篇]》中通過對IHostedService、IHost和IHostBuider這三個接口的介紹讓讀者朋友們對服務承載模型有了大致的了解。接下來我們從抽象轉向具體,看看承載系統針對該模型的實現是如何落地的。 閱讀全文
posted @ 2020-03-08 12:34 Artech 閱讀 (1441) 評論 (2) 編輯
摘要:《ASP.NET Core 3框架揭秘》(上下冊)在本月正式上市,為此出版社專門創建了一個微信群,。由于目前人數已經超過200人,只能通過邀請方能加入。有興趣的朋友可以搜索微信賬號“broadview002”(博文小丸子)并添加為好友,并在申請消息中指定本書書號“38462”,出版社工作人員將自動幫你添加到該微信群。 閱讀全文
posted @ 2020-03-07 08:00 Artech 閱讀 (5216) 評論 (54) 編輯
摘要:前面的實例演示了服務承載的基本編程模式,接下來我們從設計的角度來重新認識服務承載模型。總的來說,服務承載模型主要由三個核心對象組成:多個通過IHostedService接口表示的服務被承載于通過IHost接口表示的宿主上,IHostBuilder接口表示IHost對象的構建者。 閱讀全文
posted @ 2020-03-05 08:01 Artech 閱讀 (658) 評論 (6) 編輯
摘要:前面的實例演示了服務承載的基本編程模式,接下來我們從設計的角度來重新認識服務承載模型。總的來說,服務承載模型主要由如下圖所示的三個核心對象組成:多個通過IHostedService接口表示的服務被承載于通過IHost接口表示的宿主上,IHostBuilder接口表示IHost對象的構建者。 閱讀全文
posted @ 2020-03-04 08:12 Artech 閱讀 (2085) 評論 (4) 編輯
摘要:借助.NET Core提供的承載(Hosting)系統,我們可以將任意一個或者多個長時間運行(Long-Running)的服務寄宿或者承載于托管進程中。ASP.NET Core應用僅僅是該承載系統的一種典型的服務類型而已,任何需要在后臺長時間運行的操作都可以定義成標準化的服務并利用該系統來承載。 閱讀全文
posted @ 2020-03-03 09:16 Artech 閱讀 (790) 評論 (2) 編輯
摘要:借助.NET Core提供的承載(Hosting)系統,我們可以將任意一個或者多個長時間運行(Long-Running)的服務寄宿或者承載于托管進程中。ASP.NET Core應用僅僅是該承載系統的一種典型的服務類型而已,任何需要在后臺長時間運行的操作都可以定義成標準化的服務并利用該系統來承載。 閱讀全文
posted @ 2020-03-02 11:17 Artech 閱讀 (1407) 評論 (7) 編輯
摘要:Options模型本身與配置系統完全沒有關系,但是配置在大部分情況下會作為綁定Options對象的數據源,所以有必要將兩者結合在一起。與《擴展與定制》演示的兩個例子一樣,針對配置系統的集成同樣是通過定制Options模型相應的對象來實現的 閱讀全文
posted @ 2020-01-20 08:36 Artech 閱讀 (1661) 評論 (10) 編輯
摘要:由于Options模型涉及的核心對象最終都注冊為相應的服務,所以從原則上講這些對象都是可以定制的,下面提供幾個這樣的實例。由于Options模型提供了針對配置系統的集成,所以可以采用配置文件的形式來提供原始的Options數據,可以直接采用反序列化的方式將配置文件的內容轉換成Options對象。 閱讀全文
posted @ 2020-01-19 08:36 Artech 閱讀 (1988) 評論 (8) 編輯
摘要:《Options模型》介紹了組成Options模型的4個核心對象以及它們之間的交互關系,讀者對如何得到Options對象的實現原理可能不太了解,本篇文章主要介紹依賴注入的相關內容。既然我們能夠利用IServiceProvider對象提供的IOptions 閱讀全文
posted @ 2020-01-16 08:09 Artech 閱讀 (1498) 評論 (11) 編輯
摘要:IOptionsFactory解決了Options的創建與初始化問題,但由于它自身是無狀態的,所以Options模型對Options對象實施緩存可以獲得更好的性能。Options模型中針對Options對象的緩存由IOptionsMonitorCache對象來完成。Options模型之所以將表示緩存的接口命名為IOptionsMonitorCache,是因為緩存最初是為IOptionsMonitor對象服務的,該對象旨在實現針對承載Options對象的原始數據源的監控,并在檢測到數據更新后及時替換緩存的Options對象。 閱讀全文
posted @ 2020-01-14 08:38 Artech 閱讀 (1038) 評論 (15) 編輯
摘要:通過前面演示的幾個實例(配置選項的正確使用方式[上篇]、配置選項的正確使用方式[下篇]),我們已經對基于Options的編程方式有了一定程度的了解,下面從設計的角度介紹Options模型。我們演示的實例已經涉及Options模型的3個重要的接口,它們分別是IOptions 閱讀全文
posted @ 2020-01-13 08:51 Artech 閱讀 (803) 評論 (4) 編輯
摘要:依賴注入不僅是支撐整個ASP.NET Core框架的基石,也是開發ASP.NET Core應用采用的基本編程模式,所以依賴注入十分重要。依賴注入使我們可以將依賴的功能定義成服務,最終以一種松耦合的形式注入消費該功能的組件或者服務中。除了采用依賴注入的形式消費承載某種功能的服務,還可以采用相同的方式消費承載配置數據的Options對象。 閱讀全文
posted @ 2020-01-10 08:55 Artech 閱讀 (2627) 評論 (6) 編輯
摘要:依賴注入不僅是支撐整個ASP.NET Core框架的基石,也是開發ASP.NET Core應用采用的基本編程模式,所以依賴注入十分重要。依賴注入使我們可以將依賴的功能定義成服務,最終以一種松耦合的形式注入消費該功能的組件或者服務中。除了采用依賴注入的形式消費承載某種功能的服務,還可以采用相同的方式消費承載配置數據的Options對象。 閱讀全文
posted @ 2020-01-09 08:57 Artech 閱讀 (1895) 評論 (8) 編輯
摘要:我們在前面對配置模型中默認提供的各種IConfigurationSource實現類型進行了深入詳盡的介紹,如果它們依然不能滿足項目中的需求,我們還可以通過自定義IConfigurationSource實現類型來支持我們希望的配置源。就配置數據的持久化方式來說,將配置存儲在數據庫中應該是一種常見的方式。接下來我們會創建一個針對數據庫的IConfigurationSource實現類型,它采用Entity Framework Core來完成數據庫的存取操作。 閱讀全文
posted @ 2019-12-24 08:49 Artech 閱讀 (1427) 評論 (5) 編輯
摘要:XML也是一種常用的配置定義形式,它對數據的表達能力甚至強于JSON,幾乎所有類型的數據結構都可以通過XML表示出來。當我們通過一個XML元素表示一個復雜對象的時候,對象的數據成員定義成當前XML元素的子元素。雖然XML對數據結構的表達能力總體要強于JSON,但是作為配置模型的數據來源卻有自己的局限性,比如它們對集合的表現形式有點不盡如人意。 閱讀全文
posted @ 2019-12-23 08:53 Artech 閱讀 (678) 評論 (6) 編輯
摘要:物理文件是我們最常用到的原始配置載體,而最佳的配置文件格式主要有三種,它們分別是JSON、XML和INI,對應的配置源類型分別是JsonConfigurationSource、XmlConfigurationSource和IniConfigurationSource,它們具有如下一個相同的基類FileConfigurationSource。 閱讀全文
posted @ 2019-12-20 08:19 Artech 閱讀 (804) 評論 (4) 編輯
摘要:.NET Core采用的這個全新的配置模型的一個主要的特點就是對多種不同配置源的支持。我們可以將內存變量、命令行參數、環境變量和物理文件作為原始配置數據的來源。如果采用物理文件作為配置源,我們可以選擇不同的格式(比如XML、JSON和INI等)。如果這些默認支持的配置源形式還不能滿足你的需求,我們還可以通過注冊自定義IConfigurationSource的方式將其他形式數據作為配置來源。 閱讀全文
posted @ 2019-12-19 08:42 Artech 閱讀 (963) 評論 (1) 編輯
摘要:在《配置模型總體設計》介紹配置模型核心對象的時候,我們刻意回避了與配置同步相關的API,現在我們利用一個獨立文章來專門討論這個話題。配置的同步涉及到兩個方面:第一,對原始的配置源實施監控并在其發生變化之后重新加載配置;第二,配置重新加載之后及時通知應用程序進而使應用能夠及時使用最新的配置。 閱讀全文
posted @ 2019-12-13 08:33 Artech 閱讀 (3090) 評論 (16) 編輯
摘要:雖然應用程序可以直接利用通過IConfigurationBuilder對象創建的IConfiguration對象來提取配置數據,但是我們更傾向于將其轉換成一個POCO對象,以面向對象的方式來使用配置,我們將這個轉換過程稱為配置綁定。 閱讀全文
posted @ 2019-12-12 08:29 Artech 閱讀 (1068) 評論 (0) 編輯
摘要:配置的編程模型涉及到三個核心對象,分別通過三個對應的接口(IConfiguration、IConfigurationSource和IConfigurationBuilder)來表示。如果從設計層面來審視背后的配置模型,還缺少另一個名通過IConfigurationProvider接口表示的核心對象。總的來說,配置模型由這四個核心對象組成 閱讀全文
posted @ 2019-12-10 08:03 Artech 閱讀 (3374) 評論 (14) 編輯
摘要:提到“配置”二字,我想絕大部分.NET開發人員腦海中會立即浮現出兩個特殊文件的身影,那就是我們再熟悉不過的app.config和web.config,多年以來我們已經習慣了將結構化的配置定義在這兩個XML格式的文件之中。到了.NET Core的時代,很多我們習以為常的東西都發生了改變,其中就包括定義配置的方式。總的來說,新的配置系統顯得更加輕量級,并且具有更好的擴展性,其最大的特點就是支持多樣化的數據源。我們可以采用內存的變量作為配置的數據源,也可以將配置定義在持久化的文件甚至數據庫中。在對配置系統進行系統介紹之前,我們先從編程的角度來體驗一下全新的配置讀取方式。 閱讀全文
posted @ 2019-12-05 08:53 Artech 閱讀 (1555) 評論 (7) 編輯
摘要:提到“配置”二字,我想絕大部分.NET開發人員腦海中會立即浮現出兩個特殊文件的身影,那就是我們再熟悉不過的app.config和web.config,多年以來我們已經習慣了將結構化的配置定義在這兩個XML格式的文件之中。到了.NET Core的時代,很多我們習以為常的東西都發生了改變,其中就包括定義配置的方式。總的來說,新的配置系統顯得更加輕量級,并且具有更好的擴展性,其最大的特點就是支持多樣化的數據源。我們可以采用內存的變量作為配置的數據源,也可以將配置定義在持久化的文件甚至數據庫中。在對配置系統進行系統介紹之前,我們先從編程的角度來體驗一下全新的配置讀取方式。 閱讀全文
posted @ 2019-12-03 09:07 Artech 閱讀 (2711) 評論 (8) 編輯
摘要:標題反映的是上周五一個同事咨詢我的問題,我覺得這是一個很好的問題。這個問題有助于我們深入理解依賴注入框架在ASP.NET Core中的應用,以及服務實例的生命周期。 閱讀全文
posted @ 2019-12-02 08:52 Artech 閱讀 (4714) 評論 (42) 編輯
摘要:一個物理文件可以直接作為資源內嵌到編譯生成的程序集中。借助于EmbeddedFileProvider,我們可以采用統一的編程方式來讀取內嵌的資源文件,該類型定義在 “Microsoft.Extensions.FileProviders.Embedded”這個NuGet包中。在正式介紹EmbeddedFileProvider之前,我們必須知道如何將一個項目文件作為資源內嵌入到編譯生成的程序集中。 閱讀全文
posted @ 2019-11-25 08:34 Artech 閱讀 (3059) 評論 (14) 編輯
摘要:ASP.NET Core應用中使用得最多的還是具體的物理文件,比如配置文件、View文件以及作為Web資源的靜態文件。物理文件系統由定義在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider來構建。我們知道System.IO命名空間下定義了一整套針操作物理目錄和文件的API,實際上PhysicalFileProvider最終也是通過調用這些API來完成相關的IO操作。 閱讀全文
posted @ 2019-11-22 08:58 Artech 閱讀 (1073) 評論 (8) 編輯
摘要:在《抽象的“文件系統”》中,我們通過幾個簡單的實例演示從編程的角度對文件系統做了初步的體驗,接下來我們繼續從設計的角度來進一步認識它。這個抽象的文件系統以目錄的形式來組織文件,我們可以利用它讀取某個文件的內容,還可以對目錄或者文件實施監控并及時得到變化的通知。 閱讀全文
posted @ 2019-11-20 09:30 Artech 閱讀 (1203) 評論 (5) 編輯
摘要:ASP.NET Core應用 具有很多讀取文件的場景,比如配置文件、靜態Web資源文件(比如CSS、JavaScript和圖片文件等)以及MVC應用的View文件,甚至是直接編譯到程序集中的內嵌資源文件。這些文件的讀取都需要使用到一個IFileProvider對象。IFileProvider對象構建了一個抽象的文件系統,我們不僅可以利用它提供的統一API來讀取各種類型的文件,還能及時監控目標文件的變化。 閱讀全文
posted @ 2019-11-19 09:00 Artech 閱讀 (4679) 評論 (15) 編輯
摘要:.NET Core具有一個承載(Hosting)系統,承載需要在后臺長時間運行的服務,一個ASP.NET Core應用僅僅是該系統承載的一種服務而已。承載系統總是采用依賴注入的方式來消費它在服務承載過程所需的服務。對于承載系統來說,原始的服務注冊總是體現為一個IServiceCollection集合,最終的依賴注入容器則體現為一個IServiceProvider對象,如果要將第三方依賴注入框架整合進來,就需要利用它們解決從IServiceCollection集合到IServiceProvider對象之間的適配問題。 閱讀全文
posted @ 2019-11-18 08:16 Artech 閱讀 (1243) 評論 (5) 編輯
摘要:《服務注冊》、《服務消費》和《生命周期》主要從實現原理的角度對.NET Core的依賴注入框架進行了介紹,接下來更進一步,看看該框架的總體設計和實現。在過去的多個版本更迭過程中,依賴注入框架的底層實現一直都在發生改變,加上底層的涉及的大都是內容接口和類型,所以我們不打算涉及太過細節的層面。 閱讀全文
posted @ 2019-11-15 08:36 Artech 閱讀 (1132) 評論 (6) 編輯
摘要:生命周期決定了IServiceProvider對象采用怎樣的方式提供和釋放服務實例。雖然不同版本的依賴注入框架針對服務實例的生命周期管理采用了不同的實現,但總的來說原理還是類似的。在我們提供的依賴注入框架Cat中,我們已經模擬了三種生命周期模式的實現原理,接下來我們結合“服務范圍”的概念來對這個話題做進一步講述。 閱讀全文
posted @ 2019-11-14 07:59 Artech 閱讀 (1420) 評論 (15) 編輯
摘要:包含服務注冊信息的IServiceCollection集合最終被用來創建作為依賴注入容器的IServiceProvider對象。當需要消費某個服務實例的時候,我們只需要指定服務類型調用IServiceProvider的GetService方法即可,IServiceProvider對象就會根據對應的服務注冊提供所需的服務實例。 閱讀全文
posted @ 2019-11-13 08:16 Artech 閱讀 (1173) 評論 (9) 編輯
摘要:通過《利用容器提供服務》我們知道作為依賴注入容器的IServiceProvider對象是通過調用IServiceCollection接口的擴展方法BuildServiceProvider創建的,IServiceCollection對象是一個存放服務注冊信息的集合。在《一個迷你版DI框架》中創建的Cat框架中的服務注冊是通過類型ServiceRegistry表示的,在.NET Core依賴注入框架中,與之對應的類型是ServiceDescriptor。 閱讀全文
posted @ 2019-11-12 08:20 Artech 閱讀 (1482) 評論 (7) 欧洲青年联赛