網站首頁 編程語言 正文
ASP.NET Core 2.0 中的?WebHost(實現?IWebHost?的基類)是用于為進程提供 HTTP 服務器功能的基礎結構項目,例如,如果正在實現 MVC Web 應用或 Web API 服務。?它提供 ASP.NET Core 中所有新的基礎結構優點,使用戶能夠使用依賴關系注入,在請求管道中插入中間件等,并精確地將這些?IHostedServices?用于后臺任務。
.NET Core 2.1 中引入了?Host(實現?IHost?的基類)。?它能讓用戶擁有與?WebHost相似的基礎結構,使用它我們可以獲取和Asp.net core一樣的框架功能(依賴項注入、日志、配置、托管服務等),如果我們編寫一個服務的時候,它提供了一個非常好用的框架。一個基本的示例代碼如下:?
public static async Task Main(string[] args) { var host = new HostBuilder().Build(); await host.RunAsync(); }
主要有如下兩個步驟
通過HostBuilder生成一個Host
指向Host的Run函數運行主機
前面的代碼只有一個空環境,要實現依賴項注入、日志、配置、托管服務等功能,還需要進一步的配置,本文的這里就簡單的介紹一下通用主機的配置方法。
系統配置
系統配置有兩個函數ConfigureHostConfiguration和ConfigureAppConfiguration?
hostBuilder.ConfigureHostConfiguration(configHost => { configHost.SetBasePath(Directory.GetCurrentDirectory()); configHost.AddJsonFile("hostsettings.json", optional: true); configHost.AddEnvironmentVariables(prefix: "PREFIX_"); configHost.AddCommandLine(args); });
這兩個函數使用比較類似,它們的關系是主機配置用于初始化 IHostingEnvironment,以供在應用的構建過程中使用。
依賴關系注入
通用主機集成了DI框架,如果要使用DI框架,則需要調用ConfigureServices函數極限依賴關系注入:?
hostBuilder.ConfigureServices((context, services) => { services.AddScoped<MyService>(); });
配置日志
我們可以通過在ConfigureServices中通過DI框架配置日志系統,但HostBuilder單獨提供了一個配置日志的接口ConfigureLogging:?
hostBuilder.ConfigureLogging((hostContext, configLogging) => { configLogging.AddConsole(); configLogging.AddDebug(); });
它內部實際上依然是通過DI框架配置的日志系統。
通用配置
除了通過new一個HostBuilder外,系統還提供了一個創建HostBuilder的方法。
Host.CreateDefaultBuilder()
它的內部也是調用HostBuilder的,但他提供了一般常用的選項,具體包括:
將內容根設置為由?Directory.GetCurrentDirectory?返回的路徑。
通過以下對象加載主機配置:
前綴為?DOTNET_?的環境變量。(例如,DOTNET_ENVIRONMENT)。
命令行參數。
-
按以下順序加載應用配置:
appsettings.json。
appsettings.{Environment}.json。
應用在使用入口程序集的?Development?環境中運行時的機密管理器。
環境變量。
命令行參數。
配置控制臺和調試輸出的日志記錄。?日志記錄包含 appsettings.json 或 appsettings.{Environment}.json 文件的日志記錄配置部分中指定的日志篩選規則。
如果應用環境為"開發",請將?ServiceProviderOptions.ValidateScopes?設為?true。?有關詳細信息,請參閱作用域驗證。
也就是說,它基本上提供了我們所常用的大部分功能,并且它返回的也是一個HostBuilder,我們還可以在它的基礎上接著配置,實現我們系統中的特有功能
原文鏈接:https://www.cnblogs.com/TianFang/p/10597604.html
相關推薦
- 2021-11-26 linux服務器磁盤空間擴充方法_Linux
- 2022-03-30 聊聊redis-dump工具安裝問題_Redis
- 2022-03-30 Golang中omitempty關鍵字的具體實現_Golang
- 2022-08-19 redis在windows下啟動# Creating Server TCP listening so
- 2022-07-25 通過底層源碼理解YOLOv5的Backbone_python
- 2022-07-17 Redis內部數據結構Dict的實現方法_Redis
- 2022-06-02 CKAD認證中部署k8s并配置Calico插件_云和虛擬化
- 2023-07-03 git如何將遠程倉庫(upstream)新建分支(origin沒有)導入到自己fork的origin
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支