Perché MvcApplication.RegisterRoutes è definito come statico?
-
05-07-2019 - |
Domanda
So che potrebbe essere sciocco, ma vorrei che i guru lo chiarissero per me ... Perché questo metodo è definito come statico ..
public class MvcApplication : System.Web.HttpApplication
{
/* Why this method is declared as static? */
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Soluzione
è statico perché non è necessario che sia un metodo direttamente correlato alle istanze della classe, ma piuttosto un metodo che può essere utilizzato in un contesto statico.
In altre parole, influenza solo il parametro " route " ;, non usa alcun campo o membro di classe, quindi ha senso che sia reso statico.
Altri suggerimenti
Il metodo è statico perché può essere (come sottolinea Mark) ... ma penso che il vero motivo dietro il team ASP.NET che lo rende statico (mentre stai cercando di capire la tua domanda sul perché ? ') è stato quello di rendere più semplice il test unitario dei tuoi percorsi.
ASP.NET MVC Pro di Steve Sanderson ha una buona sezione (con metodi di supporto) per testare i tuoi percorsi. E penso che il progetto MVC Contrib abbia anche alcuni metodi di supporto per test unitari dei tuoi percorsi.
HTHS
Charles
Per me ha senso averlo statico in modo da poter accedere alle rotte (possibilmente) di un'altra applicazione senza dover istanziare la classe dell'app stessa. Puoi quindi utilizzare questi percorsi per creare URL di azioni, ecc., Da un'applicazione all'altra.
Hai solo bisogno di una tabella di route e hai bisogno della stessa utilizzata in tutta l'applicazione. Rendendolo statico significa che ottieni un insieme globale di valori che sono definiti in un unico posto.