Por que o middleware no ASP.NET Core requer semântica específica, mas não uma interface?

Como conhecido, IApplicationBuilder do método Configure (classe Startup) no ASP.NET Core requer semântica específica (para ter o método 'Invoke' com parâmetro de entrada do tipo HttpContext e Task como valor de retorno). Mas por que não é implementado como interface? Eu posso escrever algo assim:

public class FakeMiddleware
{

}

e registre-o:

    app.UseMiddleware<FakeMiddleware>();

e teremos um erro de tempo de execução. Claro, é uma coisa trivial e fácil de ser encontrada e corrigida, mas é implementada de maneira áspera, sem interface?

questionAnswers(1)

yourAnswerToTheQuestion