interface - 为什么 ASP.NET Core 中的中间件需要特定的语义,而不是接口(interface)?

标签 interface asp.net-core owin middleware owin-middleware

众所周知,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/

相关文章:

c# - 存储和检索在使用 facebook 或 twitter 授权后为用户收到的 token

java - 组合通用边界是反模式吗?

c# - COPY失败:构建上下文之外的禁止路径:../API.Common.AspNetCore/API.Common.AspNetCore.csproj()

docker - 为什么 ASP.NET Core Multi-Stage Dockerfile 使用 4 Stages

c# - Simple Injector 和默认的 AccountContoller 依赖问题

c# - 在 NancyContext 中找不到 OwinContext

go - 在 golang 中模拟内部函数

java - 当我实现一个空白的接口(interface)时,我有什么收获?

performance - 如何正确计算 PCIe 1x、2.0、3.0 速度?

json - .NET CORE 3升级CORS和Json(cycle)XMLHttpRequest错误