シンプルなパイプラインのシミュレーション
使用してシステムを。 使用にSystem.Collectionsを。 使用してSystem.Collections.Genericを。 使用してSystem.Threading.Tasksを。 使用して 静的ConsolePipeline.Programを。 使用してSystem.Linqのを。 名前空間ConsolePipeline { パブリック クラスプログラム { パブリック デリゲートタスクRequestDelegate(のHttpContextのHttpContext)。 静的 ボイドメイン(文字列[]引数) { ApplicationBuilderアプリ = 新しいApplicationBuilder()。 app.Use(非同期(コンテキスト、NEXT)=> { Console.WriteLineをは(" 第一開始... " ); のawait 次に(); Console.WriteLineを(" 第一の端... " ); }); app.Use (非同期(文脈、NEXT)=> { Console.WriteLineをは(" 第二の開始... " ); のawait 次に(); Console.WriteLineを(" 第二の端... " ); }); VARの firstmiddleware =app.Build(); firstmiddleware(新しいのHttpContext()); Console.WriteLineを(" Hello Worldの!" ); } } パブリック クラスのHttpContext {} パブリック クラスApplicationBuilder { // 中间的委托、不是中间件 パブリック 静的 読み取り専用のIList <のFunc <RequestDelegate、RequestDelegate >> _components = 新しいリスト<のFunc <RequestDelegate、RequestDelegate >> (); // 原生利用 公共 ApplicationBuilder使用(機能<RequestDelegate、RequestDelegate> ミドルウェア) { _components.Add(ミドルウェア)。 返す これを。 } // 扩展使用 公共 ApplicationBuilder使用(機能<のHttpContext、のFunc <タスク>タスク> ミドルウェア) { リターン使用(次=> { 戻りコンテキスト=> { タスクSimpleNext() => 次の(コンテキスト); 戻りミドルウェア(コンテキスト、SimpleNext); }; }); } パブリックRequestDelegateビルド() { RequestDelegateアプリ =次=> { Console.WriteLineを(" 中间中间件... " )。 返すTask.CompletedTaskを。 }。 foreachの(VARの成分で_components.Reverse()) { アプリ = 成分(APP)。 } 戻りアプリ。 } } }
業績: