私の心ASP.NETコア新しいコアオブジェクトのウェブホスト(B)

これは上で、シリーズの2番目の新しいASP.NETコアコアオブジェクトである  ウェブホストの準備フェーズ我々はWebHostBuilderの初期化と設定について話しました。私たちは、WebHostBuilderに次のような構成を作ります

  1. UseKestrelケストレルはHttpServerをに設定しました
  2. ConfigureAppConfigurationは、コンフィギュレーションファイルを設定しました
  3. 、ログプロセッサを構成する二つの方法デバッグおよびコンソールを追加ConfigureLogging
  4. UseStartup指定された起動クラス

あなたはWebHostBuilderを持っていたら、私たちはウェブホストを構築するために、ビルドメソッドを呼び出すことができます。
私たちは、最初のコード方式ビルドで見ることができます

// 初始化DI
var 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実行する方法であって、主に新しいServiceCollectionと、次の基本的な実施例の登録番号の完了です。

  • IApplicationBuilderFactory
  • IHttpContextFactory
  • IMiddlewareFactory
  • IStartupFilter
  • IServiceProviderFactory <IServiceCollection>
  • スタートアップ

実際には、IStartupはDI、2つの方法の使用に登録されました。我々はStartup.csでWebHostBuilderに指定された場合は、直接IStartupにバインドされたIStartupインタフェースから継承されました。

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

それ以外の場合は、スタートアップを構築するために命名規則に従う必要があります。

services.AddSingleton(typeof(IStartup), sp =>
{
var hostingEnvironment = 
    sp.GetRequiredService<IHostingEnvironment>();

var methods = StartupLoader.LoadMethods(
    sp, 
    startupType, 
    hostingEnvironment.EnvironmentName);
return new ConventionBasedStartup(methods);
});

ホストの初期化

それは全体のHttpパイプラインの建設を完了したので、ホストの初期化は、我々がフォーカスについて話す時間です。

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

RequestDelegateあるこの_application。引数がのHttpContextです。

public delegate Task RequestDelegate(HttpContext context);

さんが戻って7つのステップ、5つのステップがあり、IAapplicationBuilderを総括BuildApplicationのアプローチを見てみましょう私たちは、このRequestDeleagetの上に話すStartup.csを構築する方法を設定し使用して構築されます。

IApplicationBuilder 

IApplicationBuilderがHttpAbstractionsで定義されたこのプロジェクトは、HttpAbstractions ASP.NETコアは、それはまた、全体のプロセスを処理HTTPについてASP.NETコアたくさんの振る舞いを定義するASP.NETコアの重要な一部であり、Githab上のサブプロジェクトです。でもIApplicationBuilder場合。

これは主に、いくつかの重要な属性が含まれています。

私たちはこのIApplicationBuilderで与えられ、そしてこの方法はミドルウェアを追加するために使用されるStartup.csパラメータで見る方法を設定します。

public void Configure(IApplicationBuilder app) { 

  // 相当于 List<Middleware>().add(某个middleware)
  app.Use(某个Middleware) 
}
これは、クライアントに返され、最終的なステップを受ける私たちの要求を決定します。その人生はそれだけビルダで、すべての後、非常に短い、それはパイプラインの建設を完了した後しかし、それは人生は終わったのです。管理プロセスを構築する簡単です:
  • 例としては、DI IApplicationBuilderFactoryから取得builderFactory
  • builderFactory.CreateBuilder()得到ApplicationBuilder
  • IStartupFilterを取得する例
  • ApplicationBuilderを得る第二工程での送信、例えばIStartupFilterメソッド呼び出しを設定します
  • Builderはつまり、私たちは一緒に、上記について、最終的なリターンRequestDelegateを登録されているすべてのミドルウェアの文字列を話している、ApplicationBuilderメソッドを呼び出します

WebHost.Start

私たちのウェブホストの初期化が完了したら、ポートモニタIServerを開始し、HTTPリクエストの処理を開始するためにStartメソッドと呼ばれます。これは、ウェブホストの第3段階である:プロセスを開始します。私たちは、次木曜日の午前20時に説明します。

分类: 技术随笔

1 条评论

Allen · 2018年2月27日 下午2:59

能不能再加几个图呢?比如顺序流程图,帮助新手理解,文章讲的很好,总结的也很棒,感谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注

おすすめ

転載: www.cnblogs.com/owenzh/p/11306965.html