IApplicationBuilder.New() 的目的是什么

What is the purpose of IApplicationBuilder.New()

在新的 ASP.NET 5.0 (vNext) 中,启动代码依赖于 IApplicationBuilder interface. The Use method is used to add a handler to the builder, while Build is used to construct the final delegate. But I can't figure out what is the purpose of New。我一直在挖掘 GitHub,但找不到任何使用它的地方。

有人知道该方法的目的是什么吗?

它似乎在那里分支 [克隆] 原始实例(如 src/Microsoft.AspNet.Http/Extensions/MapExtensions.cs). There was also a previous MapWhenExtensions.cs 中所示,但它似乎已从 dev 分支中删除。)

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

当然很难说,因为界面和基础都没有评论 implementation

New() 创建第二个 ApplicationBuilder,共享第一个的所有 ApplicationServicesServerFeatures,但共享中间件的 none。分支扩展 (MapMapWhenUseWhen) 在内部使用它来创建新的 'branch'.

您可以在此处找到实现:ApplicationBuilder.cs

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

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

中内置的 'main' 管道所做的一样

由于这个特性,我们可以从 MVC 内部重用一块通用 ASP.NET 核心中间件。

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