理にかなっています。私はあなたがこれに遭遇した最初の人だと思います。T4MVC.ttのすべてのMapRouteメソッドを次のように置き換えてみてください。
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result) {
return MapRoute(routes, name, url, result, null /*namespaces*/);
}
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result, object defaults) {
return MapRoute(routes, name, url, result, defaults, null /*constraints*/, null /*namespaces*/);
}
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result, string[] namespaces) {
return MapRoute(routes, name, url, result, null /*defaults*/, namespaces);
}
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result, object defaults, object constraints) {
return MapRoute(routes, name, url, result, defaults, constraints, null /*namespaces*/);
}
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result, object defaults, string[] namespaces) {
return MapRoute(routes, name, url, result, defaults, null /*constraints*/, namespaces);
}
public static Route MapRoute(this RouteCollection routes, string name, string url, ActionResult result, object defaults, object constraints, string[] namespaces) {
// Start by adding the default values from the anonymous object (if any)
var routeValues = new RouteValueDictionary(defaults);
// Then add the Controller/Action names and the parameters from the call
foreach (var pair in result.GetRouteValueDictionary()) {
routeValues.Add(pair.Key, pair.Value);
}
var routeConstraints = new RouteValueDictionary(constraints);
// Create and add the route
var route = new Route(url, routeValues, routeConstraints, new MvcRouteHandler());
if (namespaces != null && namespaces.Length > 0) {
route.DataTokens = new RouteValueDictionary();
route.DataTokens["Namespaces"] = namespaces;
}
routes.Add(name, route);
return route;
}
T4MVCの助けがなくても、次のように書くだけで、コントローラーの名前空間に強い型を付けることができることに注意してください。
string[] { typeof(MyApplication.Controllers.SnippetsController).Namespace }
理想的には、特定のコントローラーをターゲットにする意図はMVC.Snippets.Rss()呼び出しで既にキャプチャされているため、名前空間を渡す必要はまったくありません。ただし、T4MVCに大きな変更を加えることなく、この機能を実現するための明確な方法を見つけることができませんでした。
とにかく、変更を確認してテストし、それがどのように機能するかを教えてください。よさそうなら入れます。
ありがとう!