由於配置文件的更改需要重新啓動應用程序(即使不啓動,路由僅在啓動時註冊,而不是在每個請求上註冊),我沒有看到爲什麼路由註冊(用於啓動?)不能在庫中「僅用於路由」(Routes.dll)?
我一直在使用支持自動依賴注入/服務註冊和路由註冊的MVCTurbine。我使用類這樣的路線登記:
public class RouteRegistrator : MvcTurbine.Routing.IRouteRegistrator
{
/// <summary>
/// Registers routes within <see cref="T:System.Web.Routing.RouteCollection"/> for the application.
/// </summary>
/// <param name="routes">The <see cref="T:System.Web.Routing.RouteCollection"/> from the <see cref="P:System.Web.Routing.RouteTable.Routes"/>.</param>
public void Register(System.Web.Routing.RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "MyNamespace.Controllers" }); // Parameter defaults
}
}
這個類並不一定是Web用戶界面項目的一部分,但可以在單獨的DLL。 MVCTurbine自動加載(並調用)位於bin文件夾(不必被引用)庫中的IRouteRegistrator和IServiceRegistrator的所有實現。而且,據我所知,沒有什麼能阻止你通過添加包含新路由的IRF來添加新路由,以實現IRouteRegistrator到應用程序的bin文件夾。這樣,您就可以「即時」添加新路線,而不會冒其他應用程序的風險(如果發生意外情況,新的dll很容易被移除)。
如果你不能或不願意使用MVC Turbine,你可以使用這個概念,通過從global.asax傳遞路由集合到動態加載的庫來「提取」路由註冊到外部dll,包含(僅)類用路由註冊的方法。如果需要,您可以輕鬆地將xml或txt配置文件讀入到常見路由的foreach循環中,但該方法僅限於簡單路由,因爲它很難(複雜的,但並非不可能)以文本形式表示任何更復雜的路由配置。
與問題沒有直接關係,但您是否考慮過持續集成的自動部署?這些可以幫助你回到家庭時間。 – Jordan
@Jordan我們有很多事情我們考慮用於部署改進,但是我沒有直接控制這一點。我們在發佈時必須在此處,以確保活動服務器上沒有任何中斷。我希望我們能夠加入TeamCity,並使其自動化,但這不是我的呼叫。這些都不能解決需要立即拋出路由的問題,因爲它們仍然需要等到自動發佈。 – Chev