IApplicationBuilder.New()的目的是什么

Fla*_*ien 5 asp.net-mvc .net-core asp.net-core

在新的ASP.NET 5.0(vNext)中,启动代码依赖于IApplicationBuilder接口.该Use方法用于向构建器添加处理程序,同时Build用于构造最终委托.但我无法弄清楚目的是什么New.我一直在GitHub挖掘,但找不到任何使用它的地方.

任何人都明白该方法的目的是什么?

Mat*_*nda 5

New()创建第二个ApplicationBuilder,共享第一个的所有ApplicationServices和ServerFeatures,但不共享任何中间件。它由分支扩展 ( Map、MapWhen、UseWhen) 在内部使用来创建新的“分支”。

您可以在这里找到实现:ApplicationBuilder.cs。

在某些情况下,它在更高级别的框架中也很有用。

例如,[MiddlewareFilter]MVC Core 中的属性New()在内部使用来执行 MVC 框架内的一段 ASP.NET Core 中间件(即作为过滤器)。MVC Core 在中间件周围创建一个小型管道,将其构建为 RequestDelegate,然后通过它运行 HttpContext。就像 ASP.NET Core 对内置的“主”管道所做的那样Startup.cs。

由于此功能,我们可以从 MVC 内部重用通用 ASP.NET Core 中间件。

有关详细信息,请参阅ASP.NET MVC Core 中的MiddlewareFilterBuilder.cs。


Bra*_*tie 4

它似乎是为了分支[克隆]原始实例(如 中所示src/Microsoft.AspNet.Http/Extensions/MapExtensions.cs)。还有一个以前的MapWhenExtensions.cs,但它似乎已从 dev 分支中删除。)

我怀疑这是以前设计的产物,它将提供根据情况绑定中间件的能力,而不影响根的配置。事实上,它从之前就已经存在,并且IBuilder被重构IApplicationBuilder,并且大多数依赖项都位于已从开发分支中删除的文件中,我大胆猜测这是旧消息。

当然,由于接口和基本实现都没有注释,所以很难说。