我到处看到的MVC样式路由示例是这样的:
void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } public static void RegisterRoutes(RouteCollection routes) { routes.Add(new Route ( "Category/{action}/{categoryName}" , new CategoryRouteHandler() )); }
将RouteTable.Routes集合传递给RegisterRoutes()的原因是什么?为什么不呢:
void Application_Start(object sender, EventArgs e) { RegisterRoutes(); } public static void RegisterRoutes() { RouteTable.Routes.Add(new Route ( "Category/{action}/{categoryName}" , new CategoryRouteHandler() )); }
除RouteTable.Routes之外的RouteCollection会添加一条路由吗?是不是RouteTable.Routes Web应用程序的 RouteCollection?
我有一个特殊的IRouteHandler,它有一个Map()方法:
public class ChatRouteHandler : IRouteHandler { private static bool mapped; public void Map() { if (!ChatRouteHandler.mapped) { RouteTable.Routes.Add ( new Route("chat/{room}/{date}", new ChatRouteHandler()) ); } }
是否有理由认为Map()应该接受RouteCollection而不是添加到RouteTable.Routes集合?再次,这个IRouteHandler会添加什么其他RouteCollection?
单元测试.
通过从RouteTable.Routes中解耦(通过参数传递)注册,您可以选择在单元测试中使用哪个RouteCollection进行注册.
恕我直言,它也更好地编写routes.Add()而不是RouteTable.Routes.Add()到处都是.
"是否有理由认为Map()应该接受RouteCollection而不是添加到RouteTable.Routes集合?"
我正在将这个问题解释为"为什么RouteCollection没有MapRoute方法,而不是扩展方法?".是的,RouteCollection在System.WEb.Routing中,而MapRoute扩展方法在System.Web.Mvc中.MapRoute()依赖于MvcHandler,System.Web.Routing不知道.