2009-03-30 18 views
11

MVCスタイルのルーティングのどこにでもある例は、次のようなものです。RouteTable.Routes RouteCollection?

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は何ですか?

答えて

13

ユニットテスト。

RouteTable.Routesからの(引数を渡す)登録をデカップリングすることで、ユニットテストで登録するRouteCollectionを選択できます。

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

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

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

+0

これがクラスデザインにどのように影響するかは間違いありません。 RouteCollectionやIRouteHandlerの単体テストの例やイラストをお勧めしますか?結局のところ、ユニットテストはRouteTable.Routesで見ることができませんでしたか? – core

+1

Haackedにはルートのデモ用ユニットテストがあります。 http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx 私の仕事では、同僚がRouteCollectionを派生して同様のことを行いました。 – CVertex

+0

リンクをありがとう。感謝します。 Map()に関して、私は少し混乱しています。 MvcHandlerなどにMap()拡張メソッドがありますか?私はMVCが全く新しいです。 – core

関連する問題