2017-04-25 2 views
4

私はASP.NET Core Webサイト用のサポートライブラリを構築しています。私はいくつかのミドルウェアを有効にする必要があります。ミドルウェアは、他のミドルウェアよりも前に追加する必要があります。、Program.csからミドルウェアを設定する方法はありますか?

IWebHostBuilderで拡張メソッドを作成して、ロギングの設定と同様にサービスを追加できますが、プログラム的な方法でミドルウェアを追加する方法はありません。これを行う方法はありますか? WebHost/WebHostBuilderのソースを見ると、何も飛び出さなかった。


最初のコメントがあれば、私は十分にはっきりしていないかもしれません。私はミドルウェアの作成方法を知っています。私がしようとしているのは、コンフィグレーション(IApplicationBuilderアプリケーション)メソッドがフレームワークによって起動時に呼び出されたときに、私のミドルウェアがすでに配置されていることを確認することです。スタートアップに先立ってServiceConfigurationを作成して作成することも可能です。だから、

public static IWebHostBuilder AddPayscaleHostingServices(this IWebHostBuilder webHostBuilder, string serviceName) 
{ 
    return webHostBuilder.ConfigureServices(collection => 
    { 
     collection.RegisterPayscaleHostingServices(); 
    }).ConfigureLogging(factory => 
    { 

    }); 
} 

のような拡張メソッドは、私の前にwebHostBuilder.Build方法には、いくつかの設定を行うための機能を提供しますが、私はIApplicationBuilder上のミドルウェア/何のための同様の何も表示されません。

おかげで、 エリック

+0

これを参照すると、まずあなた自身の研究を行ってください。

今すぐあなたのConfigureServices方法でIStartupFilterのシングルトン実装として、スタートアップフィルタを登録します。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware – wannadream

+0

私はミドルウェアを作成する方法を知っており、私はミドルウェアを追加する方法を知っています。私が知らないのは、ミドルウェアがConfigureメソッドの前に有効になっていることを、Startupクラスで呼び出す方法です。完璧な世界では、ユーザーコードの前にIApplicationBuilderに触れる機会があります。 –

答えて

3

あなたはこれを達成するために、スタートアップフィルタを使用することができます。スタートアップフィルタを使用すると、DIコンテナから解決されたサービスからミドルウェアを構成できます。スタートアップフィルタを定義

は簡単です:

public class MyStartupFilter : IStartupFilter 
{ 
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next) 
    { 
     return app => 
     { 
      // Configure middleware 
      // ... 

      // Call the next configure method 
      next(app); 
     }; 
    } 
} 

は必ずnext(app)を呼び出すか、他のミドルウェアが設定されないことを確認してください。

services.AddSingleton<IStartupFilter, MyStartupFilter>(); 
+0

ありがとう!何らかの理由で、IStartupFilterという名前が私に間違った方向に考えさせてしまいました。これからはWebHostでどのように使用されているのかを見てみましょう。名前ではなく、どうすれば使えますか? –

+0

ああ、あまりにも前に私を混乱させる。しかし、これはミドルウェアを構成するには非常にきれいで強力な方法です。 –

関連する問題