RouteTable.Routes RouteCollection? - PullRequest
       17

RouteTable.Routes RouteCollection?

11 голосов
/ 30 марта 2009

Пример, который я вижу везде для маршрутизации в стиле 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()
    ));
}

К какой RouteCollection помимо RouteTable.Routes будет добавлен маршрут? Разве RouteTable.Routes не является 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?

1 Ответ

13 голосов
/ 30 марта 2009

Модульное тестирование.

Путем отделения (через передачу аргументов) регистрации от RouteTable.Routes вы можете выбрать, какая RouteCollection будет использоваться для регистрации в модульном тестировании.

ИМХО, также лучше писать маршруты.Add () вместо RouteTable.Routes.Add () везде.

"Есть ли причина, по которой Map () должна принимать коллекцию RouteCollection и не добавлять ее в коллекцию RouteTable.Routes?"

Я интерпретирую этот вопрос как «Почему у RouteCollection нет метода MapRoute вместо метода расширения?». Да, RouteCollection находится в System.WEb.Routing, в то время как метод расширения MapRoute находится в System.Web.Mvc. MapRoute () зависит от MvcHandler, о котором System.Web.Routing не имеет представления.

...