摘要:我們在前面對配置模型中默認提供的各種IConfigurationSource實現類型進行了深入詳盡的介紹,如果它們依然不能滿足項目中的需求,我們還可以通過自定義IConfigurationSource實現類型來支持我們希望的配置源。就配置數據的持久化方式來說,將配置存儲在數據庫中應該是一種常見的方式。接下來我們會創建一個針對數據庫的IConfigurationSource實現類型,它采用Entity Framework Core來完成數據庫的存取操作。 閱讀全文
posted @ 2019-12-24 08:49 Artech 閱讀 (165) 評論 (0) 編輯
摘要:XML也是一種常用的配置定義形式,它對數據的表達能力甚至強于JSON,幾乎所有類型的數據結構都可以通過XML表示出來。當我們通過一個XML元素表示一個復雜對象的時候,對象的數據成員定義成當前XML元素的子元素。雖然XML對數據結構的表達能力總體要強于JSON,但是作為配置模型的數據來源卻有自己的局限性,比如它們對集合的表現形式有點不盡如人意。 閱讀全文
posted @ 2019-12-23 08:53 Artech 閱讀 (240) 評論 (5) 編輯
摘要:物理文件是我們最常用到的原始配置載體,而最佳的配置文件格式主要有三種,它們分別是JSON、XML和INI,對應的配置源類型分別是JsonConfigurationSource、XmlConfigurationSource和IniConfigurationSource,它們具有如下一個相同的基類FileConfigurationSource。 閱讀全文
posted @ 2019-12-20 08:19 Artech 閱讀 (506) 評論 (3) 編輯
摘要:.NET Core采用的這個全新的配置模型的一個主要的特點就是對多種不同配置源的支持。我們可以將內存變量、命令行參數、環境變量和物理文件作為原始配置數據的來源。如果采用物理文件作為配置源,我們可以選擇不同的格式(比如XML、JSON和INI等)。如果這些默認支持的配置源形式還不能滿足你的需求,我們還可以通過注冊自定義IConfigurationSource的方式將其他形式數據作為配置來源。 閱讀全文
posted @ 2019-12-19 08:42 Artech 閱讀 (556) 評論 (0) 編輯
摘要:在《配置模型總體設計》介紹配置模型核心對象的時候,我們刻意回避了與配置同步相關的API,現在我們利用一個獨立文章來專門討論這個話題。配置的同步涉及到兩個方面:第一,對原始的配置源實施監控并在其發生變化之后重新加載配置;第二,配置重新加載之后及時通知應用程序進而使應用能夠及時使用最新的配置。 閱讀全文
posted @ 2019-12-13 08:33 Artech 閱讀 (2565) 評論 (14) 編輯
摘要:雖然應用程序可以直接利用通過IConfigurationBuilder對象創建的IConfiguration對象來提取配置數據,但是我們更傾向于將其轉換成一個POCO對象,以面向對象的方式來使用配置,我們將這個轉換過程稱為配置綁定。 閱讀全文
posted @ 2019-12-12 08:29 Artech 閱讀 (578) 評論 (0) 編輯
摘要:配置的編程模型涉及到三個核心對象,分別通過三個對應的接口(IConfiguration、IConfigurationSource和IConfigurationBuilder)來表示。如果從設計層面來審視背后的配置模型,還缺少另一個名通過IConfigurationProvider接口表示的核心對象。總的來說,配置模型由這四個核心對象組成 閱讀全文
posted @ 2019-12-10 08:03 Artech 閱讀 (2683) 評論 (12) 編輯
摘要:提到“配置”二字,我想絕大部分.NET開發人員腦海中會立即浮現出兩個特殊文件的身影,那就是我們再熟悉不過的app.config和web.config,多年以來我們已經習慣了將結構化的配置定義在這兩個XML格式的文件之中。到了.NET Core的時代,很多我們習以為常的東西都發生了改變,其中就包括定義配置的方式。總的來說,新的配置系統顯得更加輕量級,并且具有更好的擴展性,其最大的特點就是支持多樣化的數據源。我們可以采用內存的變量作為配置的數據源,也可以將配置定義在持久化的文件甚至數據庫中。在對配置系統進行系統介紹之前,我們先從編程的角度來體驗一下全新的配置讀取方式。 閱讀全文
posted @ 2019-12-05 08:53 Artech 閱讀 (931) 評論 (6) 編輯
摘要:提到“配置”二字,我想絕大部分.NET開發人員腦海中會立即浮現出兩個特殊文件的身影,那就是我們再熟悉不過的app.config和web.config,多年以來我們已經習慣了將結構化的配置定義在這兩個XML格式的文件之中。到了.NET Core的時代,很多我們習以為常的東西都發生了改變,其中就包括定義配置的方式。總的來說,新的配置系統顯得更加輕量級,并且具有更好的擴展性,其最大的特點就是支持多樣化的數據源。我們可以采用內存的變量作為配置的數據源,也可以將配置定義在持久化的文件甚至數據庫中。在對配置系統進行系統介紹之前,我們先從編程的角度來體驗一下全新的配置讀取方式。 閱讀全文
posted @ 2019-12-03 09:07 Artech 閱讀 (1625) 評論 (6) 編輯
摘要:標題反映的是上周五一個同事咨詢我的問題,我覺得這是一個很好的問題。這個問題有助于我們深入理解依賴注入框架在ASP.NET Core中的應用,以及服務實例的生命周期。 閱讀全文
posted @ 2019-12-02 08:52 Artech 閱讀 (3839) 評論 (41) 編輯
摘要:一個物理文件可以直接作為資源內嵌到編譯生成的程序集中。借助于EmbeddedFileProvider,我們可以采用統一的編程方式來讀取內嵌的資源文件,該類型定義在 “Microsoft.Extensions.FileProviders.Embedded”這個NuGet包中。在正式介紹EmbeddedFileProvider之前,我們必須知道如何將一個項目文件作為資源內嵌入到編譯生成的程序集中。 閱讀全文
posted @ 2019-11-25 08:34 Artech 閱讀 (2735) 評論 (13) 編輯
摘要:ASP.NET Core應用中使用得最多的還是具體的物理文件,比如配置文件、View文件以及作為Web資源的靜態文件。物理文件系統由定義在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider來構建。我們知道System.IO命名空間下定義了一整套針操作物理目錄和文件的API,實際上PhysicalFileProvider最終也是通過調用這些API來完成相關的IO操作。 閱讀全文
posted @ 2019-11-22 08:58 Artech 閱讀 (813) 評論 (7) 編輯
摘要:在《抽象的“文件系統”》中,我們通過幾個簡單的實例演示從編程的角度對文件系統做了初步的體驗,接下來我們繼續從設計的角度來進一步認識它。這個抽象的文件系統以目錄的形式來組織文件,我們可以利用它讀取某個文件的內容,還可以對目錄或者文件實施監控并及時得到變化的通知。 閱讀全文
posted @ 2019-11-20 09:30 Artech 閱讀 (852) 評論 (5) 編輯
摘要:ASP.NET Core應用 具有很多讀取文件的場景,比如配置文件、靜態Web資源文件(比如CSS、JavaScript和圖片文件等)以及MVC應用的View文件,甚至是直接編譯到程序集中的內嵌資源文件。這些文件的讀取都需要使用到一個IFileProvider對象。IFileProvider對象構建了一個抽象的文件系統,我們不僅可以利用它提供的統一API來讀取各種類型的文件,還能及時監控目標文件的變化。 閱讀全文
posted @ 2019-11-19 09:00 Artech 閱讀 (4075) 評論 (14) 編輯
摘要:.NET Core具有一個承載(Hosting)系統,承載需要在后臺長時間運行的服務,一個ASP.NET Core應用僅僅是該系統承載的一種服務而已。承載系統總是采用依賴注入的方式來消費它在服務承載過程所需的服務。對于承載系統來說,原始的服務注冊總是體現為一個IServiceCollection集合,最終的依賴注入容器則體現為一個IServiceProvider對象,如果要將第三方依賴注入框架整合進來,就需要利用它們解決從IServiceCollection集合到IServiceProvider對象之間的適配問題。 閱讀全文
posted @ 2019-11-18 08:16 Artech 閱讀 (733) 評論 (3) 編輯
摘要:《服務注冊》、《服務消費》和《生命周期》主要從實現原理的角度對.NET Core的依賴注入框架進行了介紹,接下來更進一步,看看該框架的總體設計和實現。在過去的多個版本更迭過程中,依賴注入框架的底層實現一直都在發生改變,加上底層的涉及的大都是內容接口和類型,所以我們不打算涉及太過細節的層面。 閱讀全文
posted @ 2019-11-15 08:36 Artech 閱讀 (756) 評論 (3) 編輯
摘要:生命周期決定了IServiceProvider對象采用怎樣的方式提供和釋放服務實例。雖然不同版本的依賴注入框架針對服務實例的生命周期管理采用了不同的實現,但總的來說原理還是類似的。在我們提供的依賴注入框架Cat中,我們已經模擬了三種生命周期模式的實現原理,接下來我們結合“服務范圍”的概念來對這個話題做進一步講述。 閱讀全文
posted @ 2019-11-14 07:59 Artech 閱讀 (889) 評論 (14) 編輯
摘要:包含服務注冊信息的IServiceCollection集合最終被用來創建作為依賴注入容器的IServiceProvider對象。當需要消費某個服務實例的時候,我們只需要指定服務類型調用IServiceProvider的GetService方法即可,IServiceProvider對象就會根據對應的服務注冊提供所需的服務實例。 閱讀全文
posted @ 2019-11-13 08:16 Artech 閱讀 (785) 評論 (7) 編輯
摘要:通過《利用容器提供服務》我們知道作為依賴注入容器的IServiceProvider對象是通過調用IServiceCollection接口的擴展方法BuildServiceProvider創建的,IServiceCollection對象是一個存放服務注冊信息的集合。在《一個迷你版DI框架》中創建的Cat框架中的服務注冊是通過類型ServiceRegistry表示的,在.NET Core依賴注入框架中,與之對應的類型是ServiceDescriptor。 閱讀全文
posted @ 2019-11-12 08:20 Artech 閱讀 (991) 評論 (5) 編輯
摘要:毫不夸張地說,整個ASP.NET Core框架是建立在依賴注入框架之上的。ASP.NET Core應用在啟動時構建管道以及利用該管道處理每個請求過程中使用到的服務對象均來源于依賴注入容器。該依賴注入容器不僅為ASP.NET Core框架自身提供必要的服務,同時也是應用程序的服務提供者,依賴注入已經成為了ASP.NET Core應用的基本編程模式。 閱讀全文
posted @ 2019-11-11 08:15 Artech 閱讀 (3194) 評論 (16) 編輯
摘要:注冊攔截器旨在解決如何將攔截器應用到目標方法的問題。在我看來,針對攔截器的注冊應該是明確而精準的,也就是我們提供的注冊方式應該讓攔截器準確地應用到期望的目標方法上,不能多也不能少。Dora.Interception只提供兩種嚴謹的攔截器注冊方式,一種前面介紹的針對特性標注的方式,另一種就是本篇介紹的針對策略的方式。 閱讀全文
posted @ 2019-10-28 07:33 Artech 閱讀 (1100) 評論 (2) 編輯
摘要:按照單一職責的原則,攔截器只負責需要的攔截操作的執行,至于它采用何種方式應用到目標方法上,以及它在整個攔截器管道中的位置則屬于“攔截器注冊”的范疇。Dora.Interception提供了幾種典型的注冊方法,用戶也可以根據自己的需求實現自己的注冊方式。 閱讀全文
posted @ 2019-10-24 08:29 Artech 閱讀 (789) 評論 (1) 編輯
摘要:對于所有的AOP框架來說,多個攔截器最終會應用到某個方法上。這些攔截器按照指定的順序構成一個管道,管道的另一端就是針對目標方法的調用。從設計角度來將,攔截器和中間件本質是一樣的,那么我們可以按照類似的模式來設計攔截器。 閱讀全文
posted @ 2019-10-23 07:26 Artech 閱讀 (637) 評論 (1) 編輯
摘要:和所有的AOP框架一樣,我們必須將正常的方法調用進行攔截,才能將應用到當前方法上的所有攔截器納入當前調用鏈。Dora.Interception采用IL Eimit的方式實現對方法調用的攔截,接下來我們就來聊聊大致的實現原理。 閱讀全文
posted @ 2019-10-22 07:57 Artech 閱讀 (806) 評論 (3) 編輯
摘要:在前面的章節中,我們從純理論的角度對依賴注入進行了深入論述,我們接下來會對.NET Core依賴注入框架進行單獨介紹。為了讓讀者朋友能夠更好地理解.NET Core依賴注入框架的設計與實現,我們按照類似的原理創建了一個簡易版本的依賴注入框架,也就是我們在前面多次提及的Cat。 閱讀全文
posted @ 2019-10-21 08:30 Artech 閱讀 (2479) 評論 (19) 編輯
摘要:IoC主要體現了這樣一種設計思想:通過將一組通用流程的控制權從應用轉移到框架之中以實現對流程的復用,并按照“好萊塢法則”實現應用程序的代碼與框架之間的交互。我們可以采用若干設計模式以不同的方式實現IoC,比如我們在前面介紹的模板方法、工廠方法和抽象工廠,接下來我們介紹一種更有價值的IoC模式:依賴注入(DI:Dependency Injection)。 閱讀全文
posted @ 2019-10-18 07:13 Artech 閱讀 (1688) 評論 (6) 編輯
摘要:正如我們在《依賴注入:控制反轉》提到過的,很多人將IoC理解為一種“面向對象的設計模式”,實際上IoC不僅與面向對象沒有必然的聯系,它自身甚至算不上是一種設計模式。一般來講,設計模式提供了一種解決某種具體問題的方案,但是IoC既沒有一個針對性的問題領域,其自身也沒有提供一種可操作性的解決方案,所以我們更加傾向于將IoC視為一種設計原則。很多我們熟悉的設計模式背后都采用了IoC原則,接下來我們就來介紹幾種典型的“設計模式”。 閱讀全文
posted @ 2019-10-17 05:41 Artech 閱讀 (3211) 評論 (21) 編輯
摘要:ASP.NET Core框架建立在一些核心的基礎框架之上,這些基礎框架包括依賴注入、文件系統、配置選項和診斷日志等。這些框架不僅僅是支撐ASP.NET Core框架的基礎,我們在進行應用開發的時候同樣會頻繁地使用到它們。對于這里提到的這幾個基礎框架,依賴注入尤為重要。 閱讀全文
posted @ 2019-10-16 07:30 Artech 閱讀 (3583) 評論 (12) 編輯
摘要:Docker是dotCloud公司開源的一款產品,從其誕生那一刻算起,在短短兩三年時間里就成為了開源社區最火爆的項目。對于完全擁抱開源的.NET Core來說,它自然應該對Docker提供完美的支持。 閱讀全文
posted @ 2019-10-14 08:27 Artech 閱讀 (3935) 評論 (23) 編輯
摘要:如果想體驗Linux環境下開發.NET Core應用,我們有多種選擇。一種就是在一臺物理機上安裝原生的Linux,也可以采用虛擬機的形式安裝相應的Linux Distribution。對于X64 Windows 10的用戶來說,我們有了第三種更為方便快捷的選擇,那就是使用Windows 10提供的Linux子系統。 閱讀全文
posted @ 2019-10-13 08:17 Artech 閱讀 (1413) 評論 (8) 編輯
摘要:除了微軟自家的Windows平臺, .NET Core針對Mac OS以及各種Linux Distribution(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等)都提供了很好的支持。我們先來體驗一下使用Mac來開發.NET Core應用, 閱讀全文
posted @ 2019-10-12 08:46 Artech 閱讀 (2513) 評論 (3) 編輯
摘要:由于ASP.NET Core框架在本質上就是由服務器和中間件構建的消息處理管道,所以在它上面構建的應用開發框架都是建立在某種類型的中間件上,整個ASP.NET Core MVC開發框架就是建立在用來實現路由的EndpointRoutingMiddleware和EndpointMiddleware中間件上。ASP.NET Core MVC利用路由系統為它分發請求,并在此基礎上實現針對目標Controller的激活、Action方法的選擇和執行,以及最終對于執行結果的響應。在介紹的實例演示中,我們將對上面創建的ASP.NET Core作進一步改造,使之轉變成一個MVC應用。 閱讀全文
posted @ 2019-10-11 08:18 Artech 閱讀 (2040) 評論 (9) 編輯
摘要:我們在《上篇》利用dotnet new命令創建了一個簡單的控制臺程序,接下來我們將它改造成一個ASP.NET Core應用。一個ASP.NET Core應用構建在ASP.NET Core框架之上,ASP.NET Core框架利用一個消息處理管道完成對HTTP請求的監聽、接收、處理和最終的響應。ASP.NET Core管道由一個服務器(Server)和若干中間件(Middleware)構成,當宿主(Host)程序啟動之后,管道被構建出來,作為管道“龍頭”的服務器開始監聽來自客戶端的HTTP請求。 閱讀全文
posted @ 2019-10-10 07:15 Artech 閱讀 (3892) 評論 (12) 編輯
摘要:.NET Core帶來了全新的開發體驗,但開發方式的差異根本不足以成為你快速跨入.NET Core 世界的門檻,因為在.NET Core在很多方面比傳統的.NET Framework應用開發要簡單。為了消除很多尚未接觸過.NET Core的讀者對未知世界的恐懼,我們先通過幾個簡單的Hello World應用讓大家感受一下在Windows上的.NET Core全新的開發體驗。 閱讀全文
posted @ 2019-10-09 08:07 Artech 閱讀 (6755) 評論 (17) 編輯
摘要:.NET Core正式發布之后,我為.NET Core度身定制的AOP框架Dora.Interception也升級到3.0。這個版本除了升級底層類庫(.NET Standard 2.1)之外,我還對它進行大范圍的重構甚至重新設計。這次重構大部分是在做減法,其目的在于使設計和使用更加簡單和靈活,接下來我們就來體驗一下在一個ASP.NET Core應用程序下如何使用Dora.Interception。 閱讀全文
posted @ 2019-10-08 08:41 Artech 閱讀 (2463) 評論 (25) 編輯
摘要:HttpClient在Web調用中具有廣泛的應用,而為它添加默認請求頭是我們經常遇到的需求,本文介紹4種為HttpClient添加默認請求頭的方式。 閱讀全文
posted @ 2019-09-03 21:38 Artech 閱讀 (2956) 評論 (20) 編輯
摘要:我們知道通過C#編寫的.NET程序在編譯后會轉化成IL Code,在運行時以及時編譯的方式轉化成機器指令。如果想“篡改”某個方法的實現,要么在JIT之前改變IL代碼,要么直接修改最終的機器指令。本文采用第二種解決方案,基本的思路就是將將原方法的機器指令修改為JUMP(對應x86二進制為0xE9)指令實現向目標方法的跳轉。 閱讀全文
posted @ 2019-08-14 20:43 Artech 閱讀 (3189) 評論 (17) 編輯
摘要:《三體》讓我們了解了什么是“降維打擊”,在軟件設計領域很多時候需要反其道而行。對于某個問題,如果不能有效的解決,可以考慮是否可以上升一個維度,從高維視角審視問題往往可以找到捷徑。軟件設計是抽象的藝術,“升維打擊”實際上就是“維度”層面的抽象罷了。 閱讀全文
posted @ 2019-06-17 06:51 Artech 閱讀 (7774) 評論 (32) 編輯
摘要:2019年1月19日,微軟技術(蘇州)俱樂部成立,我受邀在成立大會上作了一個名為《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的運行原理和設計思想創建了一個 “迷你版” 的ASP.NET Core框架,并且利用這個 “極簡” 的模擬框架闡述了ASP.NET Core框架最核心、最本質的東西。整個框架涉及到的核心代碼不會超過200行,涉及到7個核心的對象。 閱讀全文
posted @ 2019-01-28 08:09 Artech 閱讀 (28933) 評論 (132) 編輯
摘要:這里所謂的與第三方AOP框架的整合不是說改變Dora.Interception現有的編程,而是恰好相反,即在不改變現有編程模式下采用第三方AOP框架或者自行實現的攔截機制。雖然我們默認提供基于IL Emit實現方式,并且對IL指令進行了深度的優化,但是如果我們真的具有更好的選擇,我們可以通過簡單的擴展完成對底層攔截機制改變 閱讀全文
posted @ 2018-11-27 07:21 Artech 閱讀 (2741) 評論 (4) 編輯
四川金7乐历史开奖号码查询