ASP.NETのminimal APIでFilterのインスタンスを利用する方法

Higtyのシステムの作り方

ASP.NETのMinimal APIでFilterのインスタンスを生成して利用する方法です。FilterをDIで使用するには以下のように書きます。

app.MapGet("/chat", ...).AddEndpointFilter<MyLogFilter>()

インスタンスを渡すことも可能です。

app.MapGet("/chat", ...).AddEndpointFilter(new MyLogFilter())


しかしながら実際には毎回のWEBリクエストごとにインスタンスを生成したい場合もあります。その場合にはAddEndpointFilterFactoryメソッドを使います。

app.MapPost("/my-page", () =>
{
    // Some code...
    return Results.Ok();
})
.AddEndpointFilterFactory((context, next) =>
{
    var filter = new MyLogFilter();
    filter.Settings.Information = true;//何か設定
    return invocationContext => filter.InvokeAsync(invocationContext, next);
});

ログを記録するフィルターでURLごとで何を記録するか設定したい場合などに有効です。