日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

我心中的ASP.NET Core 新核心对象WebHost(二)

發布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我心中的ASP.NET Core 新核心对象WebHost(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是ASP.NET Core新核心對象系列的第二篇,上一篇?WebHost準備階段?我們講到了WebHostBuilder的初始化及配置。我們給WebHostBuilder進行以下配置

  • UseKestrel?設置Kestrel為HttpServer

  • ConfigureAppConfiguration?設置了配置文件

  • ConfigureLogging?配置了日志處理器,添加了 Debug和控制臺兩種方式

  • UseStartup?指定了Startup類

  • 有了一個WebHostBuilder之后,我們就可以調用它的Build方法來構建一個WebHost。
    我們可以先來看一下Build方法的代碼

    // 初始化DIvar hostingServices = BuildCommonServices(out var hostingStartupErrors);var applicationServices = hostingServices.Clone();var hostingServiceProvider = hostingServices.BuildServiceProvider();// 構造 WebHost var host = new WebHost(applicationServices,hostingServiceProvider,_options,_config,hostingStartupErrors);// 初始化host host.Initialize();return host;

    BuildCommonServices

    這是 WebHostBuild方法執行的第一個方法,主要是new ServiceCollection 以及完成了以下幾個基礎實例的注冊:

    • IApplicationBuilderFactory

    • IHttpContextFactory

    • IMiddlewareFactory

    • IStartupFilter

    • IServiceProviderFactory<IServiceCollection>

    • IStartup

    其實將IStartup注冊到 DI,利用了兩種方式 。如果我們在WebHostBuilder中指定的 Startup.cs繼承自 IStartup接口,則直接綁定到IStartup。

    if (typeof(IStartup).GetTypeInfo().IsAssignableFrom(startupType.GetTypeInfo())) {services.AddSingleton(typeof(IStartup), startupType); }

    否則,需要?按照命名規則來構造一個Startup。

    services.AddSingleton(typeof(IStartup), sp => {var hostingEnvironment = sp.GetRequiredService<IHostingEnvironment>();var methods = StartupLoader.LoadMethods(sp, startupType, hostingEnvironment.EnvironmentName);return new ConventionBasedStartup(methods); });

    Host的初始化

    Host的初始化是我們這次要講的重點,因為它完成了整個Http管道的構建。

    if (_application == null){_application = BuildApplication();}

    這個_application即是一個RequestDelegate。參數為一個HttpContext。

    public?delegate?Task?RequestDelegate(HttpContext context);

    我們來看一下BuildApplication方法有7步,后面的五步總結起來是構造IAapplicationBuilder并用Startup.cs的Configure方法構造一個我們上面講的這個RequestDeleaget。

    IApplicationBuilder?

    IApplicationBuilder定義在HttpAbstractions這個項目里面,HttpAbstractions是ASP.NET Core在 Githab上的一個子項目,也是ASP.NET Core的重要組成部分,它定義了很多ASP.NET Core中關于HTTP處理整個過程中的行為。 IApplicationBuilder就算一個。

    它主要包括以幾個重要的屬性:

    我們在Startup.cs中看到的Configure方法給的參數就是這個IApplicationBuilder,而這個方法是用來添加Middleware的。

    public?void?Configure(IApplicationBuilder app)?{ // 相當于 List<Middleware>().add(某個middleware)app.Use(某個Middleware) }

    它決定了我們的一個請求會經歷哪些步驟最終返回給客戶端。但是它的生命很短暫,畢竟它只是個Builder,在它完成管道的構建之后,它就生命就結束了。構建管理的過程很簡單:

    • 從DI中獲取IApplicationBuilderFactory 實例 builderFactory

    • builderFactory.CreateBuilder() 得到 ApplicationBuilder

    • 獲取IStartupFilter實例

    • 調用IStartupFilter實例的Configure方法,傳處第二步得到的ApplicationBuilder

    • 調用 ApplicationBuilder的Builder方法,也就是我們上面講的,把所有注冊的Middleware串起來最后返回一個RequestDelegate

    WebHost.Start

    在我們的WebHost初始化完成之后,它的Start方法會被調用來啟動IServer的端口監聽,并開始處理Http請求。這是WebHost的第三階段:啟動過程?

    原文:http://www.jessetalk.cn/2017/11/14/aspnet-core-object-webhost-build/?


    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的我心中的ASP.NET Core 新核心对象WebHost(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。