在新的ASP.NET 5.0(vNext)中,启动代码依赖于IApplicationBuilder
interface。 Use
方法用于向构建器添加处理程序,而Build
用于构造最终委托。但我无法弄清楚New
的目的是什么。我一直在GitHub中挖掘,但找不到任何使用它的地方。
任何人都明白该方法的目的是什么?
答案 0 :(得分:3)
似乎是在那里分支[克隆]原始实例(可以在src/Microsoft.AspNet.Http/Extensions/MapExtensions.cs
中演示)。还有一个先前的MapWhenExtensions.cs
,但它似乎已从dev分支中删除。)
我怀疑它是以前设计的工件,可以根据环境绑定中间件,而不会影响root的配置。自从IBuilder
重构到IApplicationBuilder
之前它已经存在的事实以及大多数依赖都在已经从dev分支中删除的文件中,我会冒险猜测它&# 39;旧消息。
当然,由于界面和基础implementation都没有被评论,所以很难说。
答案 1 :(得分:2)
New()
创建第二个ApplicationBuilder
,共享第一个ApplicationServices
和ServerFeatures
,但没有中间件。它由分支扩展程序(Map
,MapWhen
,UseWhen
)在内部使用,以创建新的“分支”。
您可以在此处找到实施:ApplicationBuilder.cs。
在某些情况下,它在更高级别的框架中也很有用。
例如,MVC Core中的[MiddlewareFilter]
属性在内部使用New()
来执行MVC框架内的一块ASP.NET Core中间件(即作为过滤器)。 MVC Core围绕中间件创建一个小管道,将其构建到RequestDelegate中,然后通过它运行HttpContext。就像ASP.NET Core使用Startup.cs
中构建的“主”管道一样。
由于这个功能,我们可以从MVC内部重用一块通用的ASP.NET Core中间件。
有关更多信息,请参阅ASP.NET MVC Core中的MiddlewareFilterBuilder.cs。