2015-07-06 5 views
5

Nel nuovo ASP.NET 5.0 (vNext), il codice di avvio si basa su IApplicationBuilder interface. Il metodo Use viene utilizzato per aggiungere un gestore al builder, mentre Build viene utilizzato per creare il delegato finale. Ma non riesco a capire qual è lo scopo di New. Sto scavando in GitHub, ma non riesco a trovare alcun posto dove è usato.Qual è lo scopo di IApplicationBuilder.New()

Qualcuno capisce qual è lo scopo di tale metodo?

risposta

3

Sembra essere lì per ramificare [clone] l'istanza originale (come può essere dimostrato in src/Microsoft.AspNet.Http/Extensions/MapExtensions.cs). C'era anche un precedente MapWhenExtensions.cs, ma sembra essere stato rimosso dal ramo dev.)

Sospetto che sia un artefatto di un progetto precedente che fornirebbe la possibilità di associare il middleware in base alle circostanze senza influire sulla configurazione di root. Il fatto che sia stato lì da prima del IBuilder è stato rifattorizzato su IApplicationBuilder e che la maggior parte delle dipendenze erano in file che sono stati rimossi dal ramo dev, vorrei azzardare un'ipotesi che si tratti di notizie vecchie.

Ovviamente è difficile da dire dato che né l'interfaccia né la base implementation sono commentati.

+0

'app.Map' esiste ancora (ed è ** molto improbabile ** da rimuovere), ma ora fa parte del pacchetto' Microsoft.AspNet.Http.Abstractions': https://github.com/aspnet /HttpAbstractions/blob/dev/src/Microsoft.AspNet.Http.Abstractions/Extensions/MapExtensions.cs – Pinpoint

+0

@pinpoint: Sono consapevole tuttavia che sono una famiglia di altri metodi '.Map *' che non hanno reso (anche questo ha usato questo metodo). –

+0

A quali metodi di 'Mappa *' ti riferisci, esattamente? Le uniche estensioni di mappatura "ufficiali" rimandate all'era Katana erano 'Map' e' MapWhen': http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin/Mapping/ – Pinpoint

2

New() crea un secondo ApplicationBuilder, condividendo tutti i ApplicationServices e ServerFeatures del primo, ma nessuno del middleware. Viene utilizzato internamente dalle estensioni di diramazione (Map, MapWhen, UseWhen) per creare il nuovo "ramo".

È possibile trovare l'implementazione qui: ApplicationBuilder.cs.

In alcuni casi, è utile anche in framework di livello superiore.

Ad esempio, l'attributo [MiddlewareFilter] in MVC Core utilizza New() internamente per eseguire una parte del middleware di ASP.NET Core all'interno del framework MVC (ovvero come filtro). MVC Core crea una piccola pipeline attorno al middleware, lo crea in un RequestDelegate, quindi esegue HttpContext attraverso di esso. Proprio come ASP.NET Core fa con la tua pipeline 'principale' costruita in Startup.cs.

Grazie a questa funzione, è possibile riutilizzare un pezzo di middleware ASP.NET Core generico, dall'interno di MVC.

Per ulteriori informazioni, vedere MiddlewareFilterBuilder.cs in ASP.NET MVC Core.