2014-09-17 14 views
7

Podczas konfigurowania niestandardowych zleceń dla atrybutu [Authorize] do pracy w MVC firmy Microsoft w wersji 4 i 5, musimy przejść do Global.asax.cs i skonfigurować metodę o nazwie Application_PostAuthenticateRequest(). Zrobiłem to w moim obecnym projekcie i działa dobrze.MVC 5: W jaki sposób wywołanie Application_PostAuthenticateRequest() w Global.asax?

Jednak to naprawdę mnie boli, jak bardzo wygląda to jak "magia". Application_PostAuthenticateRequest() nie jest metodą wirtualną. Nie przeciążam ani nie implementuję żadnego istniejącego sygnatury metody w klasie. W jaki sposób struktura MVC może to nazwać? C# jest w końcu językiem ściśle napisanym i nie możesz wywołać metody na klasie, chyba że wiesz, że tam jest.

Jedyny sposób, w jaki mogę to zobaczyć, to odbicie. Może przechodzenie przez metody obiektu końcowego i przypisywanie delegatom dowolnych metod pasujących do określonego podpisu. Ale naprawdę nie mam pojęcia. I nie rozumiem, dlaczego projektanci mogliby to zrobić, a nie tylko wdrażać wirtualną metodę.

Podsumowując, (A), w jaki sposób wywoływana jest Application_PostAuthenticateRequest, gdy nie jest to zdefiniowana metoda klasy global.asax, oraz (B) dlaczego po prostu nie jest to metoda wirtualna?

Odpowiedz

4

Istnieje obszerny artykuł na ten temat autorstwa Ricka Strahla. Krótko mówiąc, środowisko wykonawcze używa refleksji na globalnej klasie aplikacji.

http://weblog.west-wind.com/posts/2009/Jun/18/How-do-ASPNET-Application-Events-Work

Ten rodzaj okablowania zdarzeń jest zwykle nazywane „automatyczne”, a także jest obecny na poziomie strony. Na przykład nazwa Page_Load jest wywoływana tylko z powodu domyślnego automatycznego łączenia.

http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.autoeventwireup(v=vs.110).aspx

+2

Dzięki, że to dobry artykuł. Nie mogę powiedzieć, że rozumiem, dlaczego zrobili to w ten sposób, używając metod wirtualnych. – Pharylon

+0

@Pharylon: Nie mogę wymyślić żadnego rozsądnego powodu. Takie "magiczne" okablowanie automatyczne wydaje się być przeciwne zdrowemu rozsądkowi. –

+1

@Pharylon Wydaje się, że jest to książka tekstowa dla interfejsu. Myślę, że to tylko jedna z tych rzeczy, która "działa" i ma niski priorytet, aby otrzymać jakąkolwiek uwagę na refaktoryzację w przyszłości. Mogą również pojawić się pewne zastrzeżenia dotyczące kompatybilności wstecznej, chociaż nie jestem pewien, co by to było. To zdecydowanie kiepski projekt. Magia i logika nie mieszają się. – crush

Powiązane problemy