11

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 ではありませんか?

Map() メソッドを持つ特定の IRouteHandler があります。

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 はどれでしょうか?

4

1 に答える 1

13

単体テスト。

登録を RouteTable.Routes から (引数の受け渡しによって) 切り離すことで、単体テストでの登録に使用する RouteCollection を選択できます。

私見、どこでも RouteTable.Routes.Add() の代わりに routes.Add() を書く方が良いです。

「Map() が RouteCollection を受け入れ、RouteTable.Routes コレクションに追加しない理由はありますか?」

私はこの質問を「RouteCollection に拡張メソッドではなく MapRoute メソッドがないのはなぜですか?」と解釈しています。ええ、RouteCollection は System.WEb.Routing にありますが、MapRoute 拡張メソッドは System.Web.Mvc にあります。MapRoute() は、System.Web.Routing が認識していない MvcHandler に依存しています。

于 2009-03-30T04:37:43.973 に答える