視頻地址:
https://www.bilibili.com/video/av38392956/?p=2
語雀
https://www.yuque.com/yuejiangliu/dotnet/ixtbmb
ASP.NET Core MVC 02. Web Host 的默認配置
再來看下:CreateWebHostBuilder這個方法
它使用了 WebHost的靜態方法CreateDefaultBuilder,它會返回一個類型叫做IWebHostBuilder,IWebHostBuilder它是一個對象,暫時叫他WebHostBuilder它知道怎么來設置我們的WebServer,就是設置我們WebServr的環境,里面有一些參數。
CreateDefaultBuilder就是進行了默認的設置,我們可以通過這里寫builder的代碼改變一些默認的設置
首先來看下默認配置有哪些東西
如果安裝了ReSharper可以把鼠標放在CreateDefaultBuilder上進行反編譯
Resharper的配置‘
z這里就是使用了Kestrel這個web Server
UseIISIntegration():假如說我們的程序運行於iis服務器后面UseIISIntegration這個方法也就是iis集成 ,允許iis通過windows的平證驗證然后來Kestrel這個web服務器,這點對於構建內網的web應用是非常有用的。內網的用戶都防火牆里面。所以說他們有時候使用這個
UseIIS():也會啟動dotnet core cli的運行時,並且把這個web引用放在IISworkder process里面,iisWorker這個進程,要么是萬w3wp.exe.要么是iisexpress.exe這種形式就叫做inProcess模型,inProcess模型的性能非常好。與inProcess相對的就是OutOfProcess,使用OutOfProcess可以轉發給或者叫做代理給Kestrel的web代理服務器
,這種性能沒有inProcess的性能好
源碼再向下拉,看到先使用了UseIIS這個方法,又使用了UseIISIntegration()這個方法
默認配置好做了一些log的設置
還是這個方法,看到這里配置了logging
然后又使用萊姆達表達式做了一些配置
它把代碼輸出到了這三個地方
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
程序運行起來可以看到在OutPut輸出了日志
在控制台運行dotnet run可以看到也依然輸出了日志
默認的webHostBuilder英文就是DefaultWebHostBuilder它會創建一個對象,這個對象將實現IConfiguration 接口,我們可以在整個asp.net core應用里訪問這個對象,可以通過IConfiguration 接口,通過實現了這個接口的對象里獲取一些我們需要的配置信息
源碼里面這就是默認的webHostBuilder,它是new出來的。
我們再進如這個webHostBuilder看一下。它里面有個屬性IConfiguration
在他的構造函數里 賦值給了這個_config
再進去看這個接口
通過索引字符串就可以取到配置的值,就是key value的形式的
配置信息可以從哪里來
可以直接使用這個文件配置一些配置信息
看一下源碼 為什么appsettings.json可以直接被識別出來
也可以根據環境變量的不同附加環境變量的配置文件
把頁面輸出的Hello World字符串移動到配置文件內配置
要把Hello World從配置文件里面讀取出來
就需要使用到實現了IConfiguration 接口的服務
在這個方法里請求這實現了IConfiguration 接口的服務,也可以叫做實現了IConfiguration 接口的對象,為什么我可以直接在這里方法調用請求了IConfiguration 接口的對象呢?因為asp.net core使用依賴注入。而且在整個應用所有的地方都可以使用依賴注入
比如說這里就是依賴注入進來的
原理:當asp,.net core調用這個Configure方法的時候,asp.net core會分析這個方法的幾個參數,Configure方法現在請求了這三個參數,如果能解析這三個參數,那么就會傳進來實現了該接口的對象或者叫服務進來。
現在asp.net core知道這三個接口,他也知道實現了這三個接口的服務或者叫做對象
配置文件數據來自不同地方,測試優先級
在系統環境變量變量里面設置了值
默認取的是系統環境變量的值,系統給環境變量優先級別高
如果是開發環境
先讀上面,再讀下面
系統換將變量時候后加載的,同一個屬性的信息會才用后加載的
最后是命令行的啟動參數
15分39秒
https://www.bilibili.com/video/av38392956/?p=2
不同的數據源,后加載的將會覆蓋前面的數據源的值
dotnet run Welcome="Hello Form Command line ....."
最后加載的是CommandLine所以最終會打印出來