众所周知,ASP.NET Core 中的 Configure(类 Startup)方法的 IApplicationBuilder 需要特定的语义(让方法 'Invoke' 具有 HttpContext 类型的输入参数和 Task 作为返回值)。但是为什么它没有作为接口(interface)实现呢?我可以写类似的东西:
public class FakeMiddleware
{
}
并注册它:
app.UseMiddleware<FakeMiddleware>();
我们会得到一个运行时错误。当然,这是一件小事,容易被发现和修复,但它实现得如此粗糙,没有接口(interface)?
最佳答案
Invoke 方法很灵活,您可以要求额外的参数。 ASP.NET 将使用应用程序的服务配置注入(inject)附加参数。
public async Task Invoke(HttpContext ctx,
IHostingEnvironment host,
ISomethingElse service)
{
// ...
}
C# 接口(interface)定义不能很好地提供这种灵 active 。
关于interface - 为什么 ASP.NET Core 中的中间件需要特定的语义,而不是接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897781/