¿Por qué el middleware en ASP.NET Core requiere una semántica específica, pero no una interfaz?

Como se sabe, IApplicationBuilder del método Configure (inicio de clase) en ASP.NET Core requiere una semántica específica (para tener el método 'Invoke' con el parámetro de entrada del tipo HttpContext y Task como valor de retorno). Pero, ¿por qué no se implementa como interfaz? Puedo escribir algo así:

public class FakeMiddleware
{

}

y regístralo:

    app.UseMiddleware<FakeMiddleware>();

y obtendremos un error de tiempo de ejecución. Por supuesto, es algo trivial y fácil de encontrar y solucionar, pero ¿está implementado de manera tan tosca, sin interfaz?

Respuestas a la pregunta(1)

Su respuesta a la pregunta