我看到一些像这样的代码:
public class CustomMiddleware {
private RequestDelegate next;
public CustomMiddleware (RequestDelegate nextDelegate) {
next = nextDelegate;
}
public async Task Invoke(HttpContext context, IResponseFormatter formatter) {
...
await next(context);
}
}
并且IResponseFormatter服务被注册为:
public void ConfigureServices(IServiceCollection services) {
services.AddTransient<IResponseFormatter, GuidService>();
}
我知道依赖注入是如何工作的,但我的理解中间件是这样的,next
(RequestDelegate
)代表下一个中间件的Invoke
方法,因此在CustomMiddleware中,即使第二个参数由DI解析,但RequestDelegate
的定义是:
public delegate Task RequestDelegate(HttpContext context);
在CustomMiddleware
之前的中间件如何知道CustomMiddleware
的Invoke
方法由于多了一个参数而发生了变化?它事先无法知道,因此先前中间件的next
RequestDelegate
与CustomMiddleware
的Invoke
方法的签名不匹配?