我看到的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之外,还会添加什么RouteTable.Routes?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集合中吗?同样,这个RouteCollection还会添加到哪个IRouteHandler中呢?
发布于 2009-03-30 04:37:43
单元测试。
通过(通过参数传递)将注册与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对此一无所知。
https://stackoverflow.com/questions/696000
复制相似问题