2015-07-06 38 views
5

W nowym ASP.NET 5.0 (vNext) kod startowy jest oparty na IApplicationBuilder interface. Metoda Use służy do dodania programu obsługi do programu budującego, a podczas tworzenia ostatecznego uczestnika służy Build. Ale nie wiem, jaki jest cel New. Kopałem w GitHubie, ale nie mogę znaleźć żadnego miejsca, w którym to jest używane.Jaki jest cel IApplicationBuilder.New()

Ktoś rozumie, jaki jest cel tej metody?

Odpowiedz

3

Wygląda na to, że oddziałuje [klon] oryginalną instancją (jak można wykazać w src/Microsoft.AspNet.Http/Extensions/MapExtensions.cs). Był też poprzedni MapWhenExtensions.cs, ale wygląda na to, że został usunięty z gałęzi dev.)

Podejrzewam, że jest to artefakt z poprzedniego projektu, który zapewnia możliwość wiązania oprogramowania pośredniego w oparciu o okoliczności bez wpływu na konfigurację root'a. Fakt, że był tam od zawsze przed IBuilder został refaktoryzowany do IApplicationBuilder i że większość zależności dotyczyła plików, które zostały usunięte z oddziału dev, zaryzykowałbym przypuszczenie, że to stara wiadomość.

Oczywiście trudno powiedzieć, że interfejs ani baza implementation nie zostały skomentowane.

+0

'app.Map' nadal istnieje (i jest ** bardzo mało prawdopodobne ** do usunięcia), ale jest teraz częścią pakietu' Microsoft.AspNet.Http.Abstractions': https://github.com/aspnet /HttpAbstractions/blob/dev/src/Microsoft.AspNet.Http.Abstractions/Extensions/MapExtensions.cs – Pinpoint

+0

@pinpoint: Jestem świadomy, że były rodziną innych metod ".Map *", które nie były to (który również użył tej metody). –

+0

Których metod 'Map *' używasz dokładnie? Jedynymi "oficjalnymi" rozszerzeniami mapowymi, które kiedykolwiek zostały wysłane do ery Katany, były 'Map' i' MapWhen': http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin/Mapping/ – Pinpoint

2

New() tworzy drugi ApplicationBuilder, udostępniając wszystkie ApplicationServices i ServerFeatures z pierwszego, ale żaden z middleware. Jest używany wewnętrznie przez rozgałęzione rozszerzenia (Map, MapWhen, UseWhen) w celu utworzenia nowego "oddziału".

Możesz znaleźć implementację tutaj: ApplicationBuilder.cs.

W niektórych przypadkach jest również przydatny w frameworkach wyższego poziomu.

Na przykład atrybut [MiddlewareFilter] w MVC Core używa wewnętrznie New(), aby wykonać element pośredniczący warstwy pośredniej ASP.NET Core wewnątrz struktury MVC (tj. Jako filtr). MVC Core tworzy niewielki potok wokół oprogramowania pośredniego, buduje go w RequestDelegate, a następnie uruchamia przez niego HttpContext. Tak jak ASP.NET Core działa z twoim głównym potokiem zbudowanym w Startup.cs.

Dzięki tej funkcji możemy ponownie użyć elementu podstawowego oprogramowania warstwy pośredniej ASP.NET Core, od wewnątrz MVC.

Aby uzyskać więcej informacji, zobacz MiddlewareFilterBuilder.cs w środowisku ASP.NET MVC.