From 19f34c0fce157b7b2a11c9aab1b88f4dd2120d7e Mon Sep 17 00:00:00 2001 From: freeflying1222 Date: Sat, 29 Jan 2011 19:37:22 +0800 Subject: [PATCH] Refactor: There are duplicate code blocks for getting area from "Route" in ShellRoute.cs and OrchardControllerFactory.cs. And I don't think it's a good idea assigning the responsibility to OrchardControllerFactory.cs --HG-- branch : 1.x --- src/Orchard/Mvc/Extensions/RouteExtention.cs | 35 ++++++++++++++++++++ src/Orchard/Mvc/OrchardControllerFactory.cs | 24 +------------- src/Orchard/Mvc/Routes/ShellRoute.cs | 10 +----- src/Orchard/Orchard.Framework.csproj | 1 + 4 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 src/Orchard/Mvc/Extensions/RouteExtention.cs diff --git a/src/Orchard/Mvc/Extensions/RouteExtention.cs b/src/Orchard/Mvc/Extensions/RouteExtention.cs new file mode 100644 index 000000000..882f64989 --- /dev/null +++ b/src/Orchard/Mvc/Extensions/RouteExtention.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web.Routing; +using System.Web.Mvc; + +namespace Orchard.Mvc{ + + public static class RouteExtention{ + public static string GetAreaName(this RouteBase route){ + var routeWithArea = route as IRouteWithArea; + if (routeWithArea != null) { + return routeWithArea.Area; + } + + var castRoute = route as Route; + if (castRoute != null && castRoute.DataTokens != null) { + return castRoute.DataTokens["area"] as string; + } + + return null; + } + + public static string GetAreaName(this RouteData routeData){ + object area; + if (routeData.DataTokens.TryGetValue("area", out area)) + { + return area as string; + } + + return GetAreaName(routeData.Route); + } + } +} diff --git a/src/Orchard/Mvc/OrchardControllerFactory.cs b/src/Orchard/Mvc/OrchardControllerFactory.cs index e0330a326..5dc828412 100644 --- a/src/Orchard/Mvc/OrchardControllerFactory.cs +++ b/src/Orchard/Mvc/OrchardControllerFactory.cs @@ -30,7 +30,7 @@ namespace Orchard.Mvc { var routeData = requestContext.RouteData; // Determine the area name for the request, and fall back to stock orchard controllers - var areaName = GetAreaName(routeData); + var areaName = routeData.GetAreaName(); // Service name pattern matches the identification strategy var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant(); @@ -57,27 +57,5 @@ namespace Orchard.Mvc { return null; } - public static string GetAreaName(RouteBase route) { - var routeWithArea = route as IRouteWithArea; - if (routeWithArea != null) { - return routeWithArea.Area; - } - - var castRoute = route as Route; - if (castRoute != null && castRoute.DataTokens != null) { - return castRoute.DataTokens["area"] as string; - } - - return null; - } - - public static string GetAreaName(RouteData routeData) { - object area; - if (routeData.DataTokens.TryGetValue("area", out area)) { - return area as string; - } - - return GetAreaName(routeData.Route); - } } } \ No newline at end of file diff --git a/src/Orchard/Mvc/Routes/ShellRoute.cs b/src/Orchard/Mvc/Routes/ShellRoute.cs index f8e5a540b..0e7e50083 100644 --- a/src/Orchard/Mvc/Routes/ShellRoute.cs +++ b/src/Orchard/Mvc/Routes/ShellRoute.cs @@ -25,15 +25,7 @@ namespace Orchard.Mvc.Routes { if (!string.IsNullOrEmpty(_shellSettings.RequestUrlPrefix)) _urlPrefix = new UrlPrefix(_shellSettings.RequestUrlPrefix); - var routeWithArea = route as IRouteWithArea; - if (routeWithArea != null) { - Area = routeWithArea.Area; - } - - var routeWithDataTokens = route as Route; - if ((routeWithDataTokens != null) && (routeWithDataTokens.DataTokens != null)) { - Area = (routeWithDataTokens.DataTokens["area"] as string); - } + Area = route.GetAreaName(); } public string ShellSettingsName { get { return _shellSettings.Name; } } diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index be5812871..df5cdec31 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -183,6 +183,7 @@ +